做网站一般工资如何,杭州亚运会闭幕式,福清市建设工程交易网站好像,电商设计属于什么行业这篇文章上次修改于 702 天前#xff0c;可能其部分内容已经发生变化#xff0c;如有疑问可询问作者。在新版本上(Android8.0及以上)开发时#xff0c;会遇到一些问题#xff0c;比如#xff0c;不显示通知#xff0c;Notification 声音不可控#xff0c;删除 channel 删…这篇文章上次修改于 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_UNSPECIFIEDNotificationManager.IMPORTANCE_NONENotificationManager.IMPORTANCE_MINNotificationManager.IMPORTANCE_LOWNotificationManager.IMPORTANCE_DEFAULTNotificationManager.IMPORTANCE_HIGHNotificationManager.IMPORTANCE_MAXNotificationChannel 构造函数里 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 doesnt 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 doesnt exist 的异常。2019/1/18.Dean.KingBeijing