这几天做一个小软件在API28(Android 9.0)的模拟器上测试时,发现通知栏无效,经过一番查询,了解到:API26(Android 8.0)以后,引入了**通知渠道(Notification Channels)**这么一个东西来帮助用户管理通知。 我们需要通过判断当前设备的API来针对性的进行发送通知栏 NotificationChannel三个参数: ID:通知渠道的 ID ,用户不可见,实例化Notification的时候需要用到,如果这个 ID 在实例化Notification的时候没有对应上,通知栏无效,系统还会Toast弹出一个错误*(软件不会闪退)* Name:这个是便于用户管理通知用的,用户可见,如图:“小词典温馨提示” 就是我设置的 Name Importance:渠道优先级 实例化一个NotificationChannel对象,然后NotificationManager对象调用一下createNotificationChannel()方法并传入NotificationChannel对象 实例化Notification对象,并传入 id 相对于API26以前的使用只多 2 行代码,后面的就和API26之前的通知栏一样了,这里也同时在告诉我们,知识要不断更新才稳得住啊,不然就会和我一样,在无限的闪退和报错之中迷失了方向~ 这里拓展一个API15之前的通知栏(Notification)用法,以前踩的坑,现在基本用不上,也可以了解:这里是把Notification.build()改成了.getNotification(),其他也是没有变化
并且,这个通知渠道(Notification Channels)在API26(Android 8.0)以下的Android设备上运行是会崩溃的,所以这里我再次踩坑在低版本Android设备上崩溃了…
这里我们分步解题:
第一步:判断API
if (Build.VERSION.SDK_INT >= 26) { //这里是API26以上的方法 } else { //这里是API26以下的方法 }
第二步:NotificationChannel
NotificationChannel channel = new NotificationChannel(ID, NAME, NotificationManager.IMPORTANCE_HIGH); manager.createNotificationChannel(channel);
第三步:Notification第二个参数
Notification notification = new Notification.Builder(context, ID)
代码对比:
NotificationManager manager = (NotificationManager) .getSystemService(NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= 26) {//这里是API26以上的方法 NotificationChannel channel = new NotificationChannel(ID, NAME, NotificationManager.IMPORTANCE_HIGH); manager.createNotificationChannel(channel); Notification notification = new Notification.Builder(context, ID) .setContentTitle(title) .setContentText(msg) .setSmallIcon(R.mipmap.img_icon) .build(); manager.notify(1, notification); } else {//这里是API26以下 Notification notification = new Notification.Builder(context) .setContentTitle(title) .setContentText(msg) .setSmallIcon(R.mipmap.img_icon) .build(); manager.notify(1, notification); }
拓展
Notification notification = new Notification.Builder(context) .setContentTitle(title) .setContentText(msg) .setSmallIcon(R.mipmap.img_icon) .setAutoCancel(true) .setColor(Color.GREEN) .getNotification();//API15以及以下修改这里即可 manager.notify(1, notification);
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算