Is there a way to programmatically change the details (Settings -> Apps -> [anApp]) of an app? Specifically, can I uncheck "show notification"?
I assume that you have root permissions
thanks in advance for help
Firstly it seems that it depends on which version of Android you are interested in. It seems that things changed in 4.3. I am investigating the latest master
branch (which is l-preview), so going down the AOSP rabbit hole we find...
In the Settings package...
InstalledAppDetails.java:1299
private void setNotificationsEnabled(boolean enabled) {
String packageName = mAppEntry.info.packageName;
INotificationManager nm = INotificationManager.Stub.asInterface(
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
try {
final boolean enable = mNotificationSwitch.isChecked();
nm.setNotificationsEnabledForPackage(packageName, mAppEntry.info.uid, enabled);
} catch (android.os.RemoteException ex) {
mNotificationSwitch.setChecked(!enabled); // revert
}
}
In frameworks/base...
NotificationManagerService.java:454
public void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled) {
checkCallerIsSystem();
Slog.v(TAG, (enabled?"en":"dis") + "abling notifications for " + pkg);
mAppOps.setMode(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg,
enabled ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED);
// Now, cancel any outstanding notifications that are part of a just-disabled app
if (ENABLE_BLOCKED_NOTIFICATIONS && !enabled) {
cancelAllNotificationsInt(pkg, 0, 0, true, UserHandle.getUserId(uid));
}
}
Further in frameworks/base...
base/core/java/android/app/AppOpsManager.java
124: public static final int OP_POST_NOTIFICATION = 11;
Deeper in frameworks/base...
base/services/java/com/android/server/am/ActivityManagerService.java
2000: mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"));
So if you have root you can modify the /data/system/appops.xml
. You may need to study the format by reading the code at: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/AppOpsManager.java
I found a pretty long article here with some information that might help as well:
http://commonsware.com/blog/2013/07/26/app-ops-developer-faq.html
来源:https://stackoverflow.com/questions/24577682/android-development-disable-show-notification-programmatically-with-root-perm