android 8.0 长按图标菜单,【掌阅出品】android 8.0 获取通知栏开关状态
发布日期:2021-10-21 18:59:13 浏览次数:3 分类:技术文章

本文共 1874 字,大约阅读时间需要 6 分钟。

在app开发过程中需要获取通知栏开关的状态

1.针对8.0之前设备,通过AppOpsManager的checkOpNoThrow方法获取。

public static boolean isEnableV19(Context context, String pkg, int uid) {

try {

String CHECK_OP_NO_THROW = "checkOpNoThrow";

String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

Class appOpsClass = null;

AppOpsManager mAppOps = null;

mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);

appOpsClass = Class.forName(AppOpsManager.class.getName());

Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE,

Integer.TYPE, String.class);

Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);

int value = (Integer) opPostNotificationValue.get(Integer.class);

return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) ==

AppOpsManager.MODE_ALLOWED);

} catch (Exception e) {

return true;

}

}

2.针对8.0及以上设备,发现上述方式不生效。查询系统设置源码,在NotificationBackend类中发现获取通知栏状态改到INotificationManager中了

public boolean getNotificationsBanned(String pkg, int uid) {

try {

final boolean enabled = sINM.areNotificationsEnabledForPackage(pkg, uid);

return !enabled;

} catch (Exception e) {

Log.w(TAG, "Error calling NoMan", e);

return false;

}

}

提供给APP适用的的NotificationManager 类中有INotificationManager 对象,最终我们通过反射获取通知栏开关

public static boolean isEnableV26(Context context, String pkg, int uid) {

try {

NotificationManager notificationManager = (NotificationManager)

context.getSystemService(Context.NOTIFICATION_SERVICE);

Method sServiceField = notificationManager.getClass().getDeclaredMethod("getService");

sServiceField.setAccessible(true);

Object sService = sServiceField.invoke(notificationManager);

Method method = sService.getClass().getDeclaredMethod("areNotificationsEnabledForPackage"

, String.class, Integer.TYPE);

method.setAccessible(true);

return (boolean) method.invoke(sService, pkg, uid);

} catch (Exception e) {

return true;

}

}

转载地址:https://blog.csdn.net/weixin_29391349/article/details/117503127 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android 开发闪屏动画,Android闪屏效果实现方法
下一篇:Android代码数字证书,android数字签名

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月08日 00时59分04秒