Android如何获取系统通知的开启状态详解
作者:daisy 发布时间:2021-12-28 05:45:09
标签:android,系统通知,开启状态
前言
大家应该都有所体会,平常在android应用中,有时候会用到系统通知是否开启的状态,以便进行下一步操作,所以,获取到状态是很有必要的,之前一直苦于找不到合适的方法来解决,因为毕竟涉及到系统,不好办,今日看到大神支招,试了一下,很好用,话不多少了,来一起看看详细的介绍吧。
有图有真相,首先到设置里边关闭该应用的通知开关:
然后在应用中,点击按钮,获取状态:
这时候,回到设置里,打开通知按钮:
再次点击应用中的测试按钮,可以看到,通知已经可用了:
代码量很少,但是很精辟,就一个工具类,用到了java反射原理:
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(Context context) {
AppOpsManager mAppOps = (AppOpsManager)
context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
String pkg = context.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;
}
}
总结
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
来源:http://www.runoob.com/w3cnote/android-gets-the-system-notification-on-state.html


猜你喜欢
- Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,注意是默认情况下,一个
- 本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下AndroidManifest.xml &n
- 手把手教你用C#开发Android应用程序的方法和流程摘要:用C#能开发RFID-android吗?C#真的能开发android程序吗?C#
- **请注意!请注意!!!**今天讲给大家讲解非常“有用”的设计模式,解释器模式!!!设计模式有三大种类,一种是创建型模式,一种是结构型模式,
- 作为程序员,开发完一段代码,实现了某个功能时,有必要知道:我的程序需要多长时间?是什么导致我的程序消耗很多内存?比如,统计或者处理了一大批数
- 本文实例讲述了Android中WebView图片实现自适应的方法。分享给大家供大家参考。具体实现方法如下:WebSettings ws =
- 前言:mongodb是一个基于分布式文件存储的开源数据库系统。mongodb与我们平常使用的mysql的区别: 1.
- Configuration configuration = ConfigurationManager.OpenExeConfiguratio
- 一、构造方法类的构造方法是类的成员方法的一种,它的作用是对类中的成员进行初始化操作。类的构造方法分为:
- java反射机制是什么反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法;反射机制能够做什么1、判断运行对象的所
- 用C#写的一个DVD管理器,供大家参考,具体内容如下(大神勿喷,初学者以借鉴为主)一共分为三个类分别是:DVD(启动类),XinXi(信息类
- 我们平时在日常项目中经常会遇到图片的上传和访问的情景,平时我们可能习惯于把图片传到resource或者项项目中的某个位置,这样会有一个缺点,
- 在搭建Spring Cloud Eureka环境前先要了解整个架构的组成,常用的基础模式如下图:服务提供者:将springboot服务编写好
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard
- 前言: 哲学老师说,看待事物无非是了解它是什么,为什么,怎么做所以,首先,我们先了解一下什么是“内存泄漏”摘自百度的一段话:用动态存储分配函
- 用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法:1):通过QrCodeNet(Gma.QrCod
- 混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行
- 1.多节点无缝切换问题分布式节点中的服务宕机或者重启不影响客户端使用分布式节点中的服务宕机重启不影响业务服务内部通信如果在某个分布式系统中想
- 前言在日常编码中,有了ide的支持,我们已经很少直接在命令行中直接执行java XXX命令去启动一个项目了。然而我们有没有想过,一个简单的j
- 1 * * 是Spring中的概念,和过滤器类似,可以对用户请求进行拦截过滤处理。但是相对于过滤器而言, * 要的控制更加的细节, *