有没有办法以编程方式更改应用程序的详细信息(设置->应用->[应用程序])?
具体来说,我可以取消选中“显示通知”吗?
android - Android开发:使用root权限以编程方式禁用“show notification”?-LMLPHP
我假设你有根权限
提前谢谢你的帮助

最佳答案

首先,这似乎取决于你对哪个版本的android感兴趣。似乎4.3中的情况发生了变化。我正在调查最新的分支(这是l-preview),所以在aosp兔子洞我们发现…
在设置包中…
master

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
    }
}

在框架/基础中…
InstalledAppDetails.java:1299
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));
    }
}

在框架/基础上…
NotificationManagerService.java:454
base/core/java/android/app/AppOpsManager.java
更深入的框架/基础…
124: public static final int OP_POST_NOTIFICATION = 11;
base/services/java/com/android/server/am/ActivityManagerService.java
因此,如果您有root用户,就可以修改2000: mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"));。您可能需要通过阅读https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/AppOpsManager.java上的代码来研究格式。
我在这里找到了一篇很长的文章,其中有些信息可能也有帮助:
http://commonsware.com/blog/2013/07/26/app-ops-developer-faq.html

10-07 19:12
查看更多