"Show notifications" is greyed out for some apps. What's causing it and how do I change it? There are some apps for which "Show Notifications" is greyed out, thus effectively barring you from changing the notification policy of that app.


Why or when does it happen?
I've noticed this issue for system apps only? Does it mean that only system apps can have this option greyed out?
How do I change the notification policy for such apps?


(Click image to enlarge)





I have a rooted Android 4.2.1, 4.4.2 and 5.0.2. I'm aware of changing the notification policy in Android 4.2.1 and 4.4.2. You may move the focus to Lollipop, only for third point.
With root access, there are some apps such as 3c Toolbox that allow you to change the notification settings for any app. App Ops is another one that gives you control over all apps' general permissions.

You can actually manage all app permissions from the command line with root access. In Android 5.x, appops was added. It gives control over general app permissions. 

Find your app's package name by looking through the list generated by:

# pm list packages | sed 's/^package://'


Get a list of permissions and their mode (allow/ignore/deny/default) for a particular app: 

(Note that get parameter is not available in 5.0.2 or earlier Lollipop releases, but was introduced in  Android 5.1.0)

# appops get &lt;package_name&gt;


Set a particular app's permission:

# appops set &lt;package_name&gt; &lt;permission&gt; &lt;mode&gt;


To accomplish the same thing as unticking the "show notifications" box in the application manager:

# appops set &lt;package_name&gt; POST_NOTIFICATION ignore


From my experience, using deny as a mode can break appops so that permissions can't be accessed or changed from an app, so I recommend using ignore, which is what the system uses.

If in some case, you end up breaking access to app ops through something like the application manager, you can reset the permissions for an app:

appops reset &lt;package_name&gt;




For more control over detailed permissions, you can use pm in the terminal. This works with older Android versions.

Find your app's package name by looking through the list generated by:

# pm list packages | sed 's/^package://'


Then list the permissions for a particular package:

# pm list permissions &lt;package_name&gt;


Find the notifcation permissions:

# pm list permissions &lt;package_name&gt; | grep NOTIF


Grant or revoke a particular permission:

# pm grant &lt;package_name&gt; &lt;permission&gt;
# pm revoke &lt;package_name&gt; &lt;permission&gt;


The permissions listed with package manager are very detailed. Using a capable app to manage them may be a more practical route.