Android 检查APP是否被设置禁止显示通知
2015-09-24 12:15
435 查看
即检测下图的「显示通知」有没有被打勾
代码来自爆栈,未测试
/**
* Created by desgraci on 5/7/15.
*/
public class NotificationsUtils {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static boolean isNotificationEnabled() {
AppOpsManager mAppOps = (AppOpsManager) GlobalContext.getContext().getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = GlobalContext.getContext().getApplicationInfo();
String pkg = GlobalContext.getContext().getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass = null; /* Context.APP_OPS_MANAGER */
try {
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 = (int)opPostNotificationValue.get(Integer.class);
return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
}
代码来自爆栈,未测试
/**
* Created by desgraci on 5/7/15.
*/
public class NotificationsUtils {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static boolean isNotificationEnabled() {
AppOpsManager mAppOps = (AppOpsManager) GlobalContext.getContext().getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = GlobalContext.getContext().getApplicationInfo();
String pkg = GlobalContext.getContext().getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass = null; /* Context.APP_OPS_MANAGER */
try {
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 = (int)opPostNotificationValue.get(Integer.class);
return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
}
相关文章推荐
- iOS实现截屏并保存到相册
- Android 检查APP是否被设置禁止显示通知
- 当Android系统内存不足时,会回收后台运行应用的内存
- Android调用手机拍照功能的方法
- App Store加急审核
- Android应用开发学习—Toast使用方法大全
- ionic preparing for ios 9
- Android 事件传递 ——下拉刷新
- Unity3D之Mecanim动画系统学习笔记(九):Blend Tree(混合树)
- unity3d 5.0以上打包安卓apk部分手机黑屏问题,尤其魅族手机
- 关于Xcode7上传appstore,TencentOpenApi_IOS_Bundle.bundle报错问题的解决方法
- 单例模式浅析 - ios
- Android Git 开源项目分类汇总 好用的Android开发库
- Android PopupWindow使用之地区、学校选择二级联动
- Xcode7出现Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:]
- Unity中的Material和Shader<坑待填>
- Unity中的Material和Shader<坑待填>
- ios9下ionic框架报[$rootScope:infdig] 10 $digest() iterations reached. Aborting!的解决办法
- IOS视图生命周期与视图控制器关系
- %1$s %1$d (java & Android 格式化字符串)