【问题标题】:Android development: disable "show notification" programmatically with root permission?Android开发:使用root权限以编程方式禁用“显示通知”?
【发布时间】:2014-08-25 23:49:46
【问题描述】:

有没有办法以编程方式更改应用的详细信息(设置 -> 应用 -> [anApp])? 具体来说,我可以取消选中“显示通知”吗?

我假设你有 root 权限

提前感谢您的帮助

【问题讨论】:

    标签: android notifications settings root


    【解决方案1】:

    首先,这似乎取决于您对哪个版本的 Android 感兴趣。似乎在 4.3 中情况发生了变化。我正在调查最新的master 分支(即 l-preview),所以沿着我们发现的 AOSP 兔子洞走下去……

    在设置包中...

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

    在框架/基础...

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

    在框架/基础中进一步...

    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

    2000: mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"));

    所以如果你有 root 你可以修改/data/system/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

    【讨论】:

    • 感谢您的回复。我曾认为自己是应用程序操作,但作为一种方法过于依赖设备并且不想使用 root 权限。例如,不适用于 Nexus 5 和 Kitkat 4.4.4。我的目的是限制电子邮件通知,我的目标是禁用同步。 ContentResolver.setSyncAutomatically ("myemail@domain.com", "com.android.mail", false);停止 // ContentResolver.setSyncAutomatically ("myemail@domain.com", "com.android.mail", true); // 开始
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多