NotificationUtil.kt

object NotificationUtil {/*** 打开手机设置页面* @param context Context*/fun setNotification(context: Context) {val enabled = isNotificationEnabled(context)if (!enabled) {val localIntent = Intent()if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {localIntent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGSlocalIntent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)localIntent.putExtra("app_uid", context.applicationInfo.uid)} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {localIntent.action = "android.settings.APP_NOTIFICATION_SETTINGS"localIntent.putExtra("app_package", context.packageName)localIntent.putExtra("app_uid", context.applicationInfo.uid)} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {localIntent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGSlocalIntent.addCategory(Intent.CATEGORY_DEFAULT)localIntent.data = Uri.parse("package:" + context.packageName)} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)localIntent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGSlocalIntent.data = Uri.fromParts("package", context.packageName, null)} else {localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)if (Build.VERSION.SDK_INT >= 9) {localIntent.action = "android.settings.APPLICATION_DETAILS_SETTINGS"localIntent.data = Uri.fromParts("package", context.packageName, null)} else if (Build.VERSION.SDK_INT <= 8) {localIntent.action = Intent.ACTION_VIEWlocalIntent.setClassName("com.android.settings","com.android.setting.InstalledAppDetails")localIntent.putExtra("com.android.settings.ApplicationPkgName",context.packageName)}}context.startActivity(localIntent)}}/*** 判断当前app在手机中是否开启了允许消息推送* @param mContext Context* @return Boolean*/fun isNotificationEnabled(mContext: Context): Boolean {return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {val mNotificationManager =mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManagervar channel = mNotificationManager.getNotificationChannel(PortalCode.ChannelId)!(!mNotificationManager.areNotificationsEnabled() || channel.importance == NotificationManager.IMPORTANCE_NONE)} else if (Build.VERSION.SDK_INT >= 24) {val mNotificationManager =mContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManagermNotificationManager.areNotificationsEnabled()} else if (Build.VERSION.SDK_INT >= 19) {val CHECK_OP_NO_THROW = "checkOpNoThrow"val OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"val appOps = mContext.getSystemService(Context.APP_OPS_SERVICE) as AppOpsManagerval appInfo = mContext.applicationInfoval pkg = mContext.applicationContext.packageNameval uid = appInfo.uidtry {val appOpsClass = Class.forName(AppOpsManager::class.java.name)val checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE,Integer.TYPE, String::class.java)val opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION)val value = opPostNotificationValue[Int::class.java] as Int(checkOpNoThrowMethod.invoke(appOps, value, uid, pkg) as Int== AppOpsManager.MODE_ALLOWED)} catch (e: ClassNotFoundException) {true} catch (e: NoSuchMethodException) {true} catch (e: NoSuchFieldException) {true} catch (e: InvocationTargetException) {true} catch (e: IllegalAccessException) {true} catch (e: RuntimeException) {true}} else {true}}
}

调用:

if (NotificationUtil.isNotificationEnabled(this)) {//当前app允许消息通知
} else {AlertDialog.Builder().message("为了您能收到推送通知请点击确定开始设置").okButtonText("确定").build().apply {setOkBtnClickListener {NotificationUtil.setNotification(this@CurMainActivity)}show(this@CurMainActivity)}
}

Android 判断当前应用是否开启消息通知相关推荐

  1. uni-app开启消息通知

    场景:uni-app开启移动app,如果用户没开启消息通知提示开启 因为uni-app升级到androidx,之前的android.support.v4.app.NotificationManager ...

  2. 浏览器如何开启消息通知

    以下是: 谷歌/火狐/搜狗/UC/QQ/360 如何开启消息通知介绍. chrome 谷歌浏览器 右上角 --> 设置 --> 找到 "网站设置" --> &qu ...

  3. android 定时在通知栏提醒,Android 如何让程序定时进行消息通知到通知栏

    实现定时推送信息到通知栏 MainActivity.class public class MainActivity extends Activity { @Override protected voi ...

  4. Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载

    场景 经常会有后台服务向Android推送消息通知的情况. 实现 首先在Android Studio中新建一个Android应用 在Project根目录的build.gradle中配置了jcenter ...

  5. android 通知权限设置在哪,Android 打开消息通知权限

    转载自https://blog.csdn.net/rocrocflying/article/details/78333256?locationNum=8&fps=1 和 https://blo ...

  6. 「Android基于MQTT实现消息通知」

    「Android基于MQTT实现消息通知」 一.写在前面 在对接项目中IoT时,发现目前有对MQTT做了接入,这里记录一下,官方的资料比较详细,这里主要从实现细节出发:对具体的需求以及配套的技术方案进 ...

  7. Android 监听系统中消息通知事件

    0. 学习文章 参考了下面Blog 完全没有任何多余的代码 https://blog.csdn.net/wanghang1208/article/details/49905403 原来百度卫士的通知栏 ...

  8. Java中集成极光推送实现给Android提送消息通知(附代码下载)

    场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  9. Android学习—Notification消息通知

    最近在项目中需要使用消息通知,自己把它封装成了一个方法,需要的时候方便调用, 下面对Notification类中的一些常量,字段,方法简单介绍一下: 常量: DEFAULT_ALL    使用所有默认 ...

最新文章

  1. [转]Java8-本地缓存
  2. 微信公众号开发扫码登录(java版)
  3. Maximal Square 我们都在寻找最高1子矩阵(leeCode)
  4. c# AutoMapper 使用方式和再封装
  5. 10---Net基础加强
  6. 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
  7. Linux vip地址通信原理,IPv6的组播地址(掌握IPv6通信原理的关键知识点)
  8. 【web前端】table的border属性解析(内联样式表和内部样式表中的区别)
  9. TCP/IP协议栈详解
  10. 时域分析——有量纲特征值含义一网打尽
  11. html autoplay属性,HTML autoplay属性用法及代码示例
  12. 英特尔推出物联网零售平台 RRP,并将在零售业投资 1 亿美元
  13. 今天女神打了个电话让我去修电脑,无数次戳中笑点
  14. 脾肾阳虚平时要注意什么?
  15. oracle查询备份大小,【EXPDP】使用EXPDP备份数据时预估大小——ESTIMATE参数
  16. v12.2.8 released版本介绍--2019_7
  17. ZDMS0.8/30S-RS55/EX防爆型自动跟踪定位射流灭火装置
  18. 树莓派输出高电平C语言,树莓派控制高电平蜂鸣器(c语言+新手向)
  19. 天池比赛:o2o优惠券使用预测
  20. 木工开料机,木工开料机安全操作规程

热门文章

  1. 普通人学python有意义吗_普通人学python有什么用
  2. Oracle 数据库 简单操作命令(新手看 可以收藏哟)
  3. Linux Ubuntu NFS 调试,Arm 挂载命令
  4. 记录自己三天速成django+html制作国内疫情可视化平台的过程(二)
  5. 提前期与计划展望期------(转)
  6. Python项目实例——用代理IP爬取1688商品
  7. 重温“卡马克谈functional programming in c++”
  8. java斗地主发牌_java实现斗地主发牌系统
  9. java pdf输出图片_Java PDF转换成图片并输出给前台展示
  10. 大数据运营之财务数据模型设计