去除应用通知

系统环境:安卓5.1


--- a/frameworks/base/services/core/java/com/android/server/AppOpsService.java
+++ b/frameworks/base/services/core/java/com/android/server/AppOpsService.java
@@ -598,6 +598,16 @@ public class AppOpsService extends IAppOpsService.Stub {
verifyIncomingUid(uid);
verifyIncomingOp(code);
synchronized (this) {
+ //zk add for block some app notifications
+ if(code == AppOpsManager.OP_POST_NOTIFICATION){
+ if (packageName.equals("com.android.dialer") || packageName.equals("com.nbpt.gateway.lancher")) {
+ return AppOpsManager.MODE_ALLOWED;
+ }else {
+ return AppOpsManager.MODE_IGNORED;
+ }
+ } 
+ // add by zk end

只保留了两个应用通知,包名:1.com.android.dialer   2.com.nbpt.gateway.lancher


--- a/frameworks/base/core/java/android/app/AppOpsManager.java
+++ b/frameworks/base/core/java/android/app/AppOpsManager.java
@@ -863,7 +863,7 @@ public class AppOpsManager {
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,
-            AppOpsManager.MODE_ALLOWED,
+            AppOpsManager.MODE_IGNORED,
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,
             AppOpsManager.MODE_ALLOWED,


默认关闭所有的应用通知,对应OP_POST_NOTIFICATION。后来发现一个问题,就是当默认关闭了所有应用通知之后,Toast无法弹出,虽然在设置里显示没有屏蔽应用通知,但是的进行开关操作才能弹出,要想解决关闭应用通知无法弹出Toast问题,进行如下修改:


--- a/frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -1067,12 +1067,12 @@ public class NotificationManagerService extends SystemService {
 
             final boolean isSystemToast = isCallerSystem() || ("android".equals(pkg));
 
-            if (ENABLE_BLOCKED_TOASTS && !noteNotificationOp(pkg, Binder.getCallingUid())) {
+            /*if (ENABLE_BLOCKED_TOASTS && !noteNotificationOp(pkg, Binder.getCallingUid())) {
                 if (!isSystemToast) {
                     Slog.e(TAG, "Suppressing toast from package " + pkg + " by user request.");
                     return;
                 }
-            }
+            }*/


 

到这里修改就可以了,我们来看看noteNotificationOp()函数

private boolean noteNotificationOp(String pkg, int uid) {
        if (mAppOps.noteOpNoThrow(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg)
                != AppOpsManager.MODE_ALLOWED) {
            Slog.v(TAG, "notifications are disabled by AppOps for " + pkg);
            return false;
        }
        return true;
    }


在里面进行了

if(mAppOps.noteOpNoThrow(AppOpsManager.OP_POST_NOTIFICATION, uid, pkg) !=AppOpsManager.MODE_ALLOWED)的判断

目的是在弹Toast时候不去进行AppOpsManager.OP_POST_NOTIFICATION的判断。就OK了!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin@1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值