这篇文章上次修改于 702 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

在新版本上(Android8.0及以上)开发时,会遇到一些问题,比如,不显示通知,Notification 声音不可控,删除 channel 删到崩溃。

闲下来测试一番,总结 Notification 如下:

首先,Android8.0 及以上版本使用 Notification 需要为其设置 NotificationChannel ,理解为频道,为 Notification 归类,统一管理,设置声音,震动等都需要通过 NotificationChannel 进行设置NotificationChannel channel = new ...

channel.setSound(null,null);//静音

channel.enableVibration(true);//震动

channel.setVibrationPattern(new long[]{100,200,300});//震动模式

channel.enableLights(true);//呼吸灯

channel.setLightColor(Color.rgb(0,0,0));//呼吸灯颜色

NotificationChannel 构造函数参数解释id :唯一标示

name :显示在应用详情中的名称,不唯一,可重复,即使在同一组中也可重复(下面会提到组的概念)。

importance :级别,重要性 NotificationManager 共提供了7个级别的常量NotificationManager.IMPORTANCE_UNSPECIFIED

NotificationManager.IMPORTANCE_NONE

NotificationManager.IMPORTANCE_MIN

NotificationManager.IMPORTANCE_LOW

NotificationManager.IMPORTANCE_DEFAULT

NotificationManager.IMPORTANCE_HIGH

NotificationManager.IMPORTANCE_MAX

NotificationChannel 构造函数里 id 是唯一的,使用相同 id ,不同 name new出的新对象代表的是同一个 channel ,name 会被最后一个 NotificationManager.createNotificationChannel(channel) 中的 channel name 覆盖。

还有一个为 NotificationChannel 归类的组的概念,NotificationChannelGroup , 他的构造函数只有 id 和 name ,同样的,和上面 NotificationChannel 的含义一样,略。

将 NotificationChannel 添加到 NotificationChannelGroup 的方式,不是 group.add 或 group.set ,而是NotificationChannel channel = new ...

channel.setGroup("group1");//传参 NotificationChannelGroup的id

由于是上面这种方式关联二者,所以 NotificationChannelGroup 必须先创建NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

NotificationChannelGroup group = new NotificationChannelGroup("group1","This is Group 1");

manager.createNotificationChannelGroup(group);

再通过 channel.setGroup("group1") 做关联,否则会报异常Caused by: java.lang.IllegalArgumentException: NotificationChannelGroup doesn't exist

并且 channel.setGroup("group1") 必须在 NotificationManager.createNotificationChannel(channel) 之前设置,否则无效,所以,他们的顺序是manager.createNotificationChannelGroup(group);

channel.setGroup("group1");

manager.createNotificationChannel(channel);

当 NotificationChannelGroup 在没有添加任何 NotificationChannel 时,在应用详情中不会显示该组

NotificationChannelGroup 好像记仇,channel 只要加进去的,就永远删不掉,尝试使用channel.setGroup(null);//置空

channel.setGroup("group2");//设置到其他组

都不管用,通过manager.deleteNotificationChannel("channel1");//传参 channel的id

也只是能隐藏 channel,如果还用相同的 id 创建 channel ,新 channel 还在第一次加入的那个组中,只有卸载应用才能删除 channel ,在开发时,一定要注意这一点,在调试时,可以采用不同的 id 以避免出现诡异的现象。

我理解这是一个注册的机制,应用安装后,只要 NotificationManager.createNotificationXXX 代码运行一次就注册了,即使应用以后的版本注释了该段代码,他依然有效,想要"删除",需要主动调用 NotificationManager.deleteNotificationXXX ,想要彻底删除只能卸载应用~

还要提一点, NotificationCompat.Builder 的构造函数中 channelId 必须是注册过的 channelId,否则在 NotificationManager.notify 时,不会出现通知,也不会报像 channel doesn't exist 的异常。

2019/1/18.

Dean.King

Beijing

android8 通知呼吸灯_Android8.0及以上的Notification相关推荐

  1. android8 通知呼吸灯_android8 通知呼吸灯_说说8.0下 Android 通知(Notification)

    当运用程序不在前台运转,这时便借助关照( Notification )向用户发送少许提醒消息. 发出关照后,手机非常上方的状况栏中就会表现一个关照图标,下拉状况栏就会看到关照的细目. 1 根基用法 / ...

  2. android8 通知呼吸灯_android学习笔记----解决兼容8.0以上和8.0之前版本通知栏显示、振动、LED呼吸灯闪烁问题(真机验证)...

    Android 8.0系统的通知栏适配文章讲解(郭霖大神的): 然后开始试验了: 模拟器: 真机(华为荣耀V9,8.0系统),下拉横幅需要手动打开,除非是厂家白名单,比如QQ.微信 我在oppo手机6 ...

  3. android8 通知呼吸灯_说说8.0下 Android 通知(Notification)

    当运用程序不在前台运转,这时便借助关照( Notification )向用户发送少许提醒消息. 发出关照后,手机非常上方的状况栏中就会表现一个关照图标,下拉状况栏就会看到关照的细目. 1 根基用法 / ...

  4. android8 通知呼吸灯_手机没有呼吸灯?这款APP帮你实现手机通知“可视化”

    7月6日消息,现在越来越多的手机因为全面屏设计导致了LED通知灯被移除.对于这一问题,外媒Phone Arena称,一位安卓程序开发人员开发了一款名为"通知好友"(Notify B ...

  5. android8 通知呼吸灯_Android中通知Notification使用实例(振动、灯光、声音)

    本文实例讲解了通知Notification使用方法,此知识点就是用作通知的显示,包括振动.灯光.声音等效果,分享给大家供大家参考,具体内容如下 效果图: MainActivity: import ja ...

  6. android8 通知呼吸灯_正在消失的功能,为什么越来越多的手机没有呼吸灯?你知道原因吗...

    正在消失的功能,为什么越来越多的手机没有呼吸灯?你知道原因吗 其实说到手机呼吸灯,大家应该都不陌生,毕竟如果你有心心念念的人儿,每次呼吸灯闪烁,都会迫不及待的打开手机查看消息,想看看是不是TA给自己发 ...

  7. android8 通知呼吸灯_手机呼吸灯那么好用!为什么要取消它?没有呼吸灯真的好吗?...

    说起手机的呼吸灯相信大家应该都是不会陌生吧,当我们手机内有消息的时候,呼吸灯就会亮起,甚至是有些手机的呼吸灯还可以因为不同的消息设置不同的提示颜色,随着智能手机的发展,相比过去单调的设计,有的厂商为其 ...

  8. android8 呼吸灯,红米note8pro呼吸灯颜色如何设置?

    红米note8pro支持呼吸灯功能,当有未读通知的时候,指示灯就会闪烁提醒.此外,我们还可以根据自己的喜好设置呼吸灯的颜色,下面为大家带来详细的设置教程. 红米note8pro怎么设置呼吸灯颜色 1. ...

  9. 【正点原子FPGA连载】第十二章 呼吸灯实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

最新文章

  1. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案
  2. php登录框注入,分享一个php的防火墙,拦截SQL注入和xss
  3. GDCM:gdcm::PhotometricInterpretation的测试程序
  4. Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
  5. Pytorch中GPU使用
  6. 刷新认知!基因表达,男女有别|Science、Cell等发布15篇人类遗传调控新成果
  7. 移动客户端UI设计指南
  8. 从Google Scholar看各大科技公司科研水平
  9. tar.xz文件怎样解压
  10. java类和对象数组传参_Java 练习(替换数组元素, 将对象作为参数传递给方法)
  11. Kafka配置JAAS
  12. day13、1 - 抓包--科来软件使用
  13. 国内外各大免费搜索引擎、导航网址提交入口
  14. 零售超市pos收银系统多少钱一台
  15. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
  16. 小米 红米Note(联通3G版)解BL锁教程 申请BootLoader解锁教程
  17. MacBook Pro 13 A1502 更换电池
  18. 杰奇安装 mysql失败_关于杰奇CMS安装乱码的解决方法
  19. java记忆纸牌 计分功能,怎样用数字编码记忆法记忆扑克牌
  20. 【浙政钉埋点】Vue中使用浙政钉的埋点详解

热门文章

  1. spark消费kafka产生数据堆积怎么处理_SparkStreaming读取Kafka的两种方式
  2. 经典兔子问题python视频_Python练习题 007:兔子生兔子
  3. python 公开课_python公开课视频(11~20)
  4. dw如何写php代码提示,DW CS5 jquery代码提示插件
  5. c++ udp通信_Web 通信协议,你还需要知道:SPDY 和 QUIC
  6. PP视频如何查看上下集的快捷键
  7. WeX5 Model 里data ,baasData 数据过滤条件清除 数据初始化
  8. java获取json中某个字段
  9. Java Collections.emptyList() 方法的使用及注意事项
  10. java实现 支付宝支付