目录

      • 这里我们分步解题:
        • 第一步:判断API
        • 第二步:NotificationChannel
        • 第三步:Notification第二个参数
      • 代码对比:
        • 拓展

这几天做一个小软件在API28(Android 9.0)的模拟器上测试时,发现通知栏无效,经过一番查询,了解到:API26(Android 8.0)以后,引入了**通知渠道(Notification Channels)**这么一个东西来帮助用户管理通知。
并且,这个通知渠道(Notification Channels)在API26(Android 8.0)以下的Android设备上运行是会崩溃的,所以这里我再次踩坑在低版本Android设备上崩溃了…

这里我们分步解题:

第一步:判断API

我们需要通过判断当前设备的API来针对性的进行发送通知栏

if (Build.VERSION.SDK_INT >= 26) {//这里是API26以上的方法} else {//这里是API26以下的方法 }

第二步:NotificationChannel

NotificationChannel三个参数:

ID:通知渠道的 ID ,用户不可见,实例化Notification的时候需要用到,如果这个 ID 在实例化Notification的时候没有对应上,通知栏无效,系统还会Toast弹出一个错误*(软件不会闪退)*

Name:这个是便于用户管理通知用的,用户可见,如图:“小词典温馨提示” 就是我设置的 Name

Importance:渠道优先级

实例化一个NotificationChannel对象,然后NotificationManager对象调用一下createNotificationChannel()方法并传入NotificationChannel对象

NotificationChannel channel = new NotificationChannel(ID, NAME, NotificationManager.IMPORTANCE_HIGH);manager.createNotificationChannel(channel);

第三步:Notification第二个参数

实例化Notification对象,并传入 id

Notification notification = new Notification.Builder(context, ID)

相对于API26以前的使用只多 2 行代码,后面的就和API26之前的通知栏一样了,这里也同时在告诉我们,知识要不断更新才稳得住啊,不然就会和我一样,在无限的闪退和报错之中迷失了方向~

代码对比:

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);        }

拓展

这里拓展一个API15之前的通知栏(Notification)用法,以前踩的坑,现在基本用不上,也可以了解:这里是把Notification.build()改成了.getNotification(),其他也是没有变化

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);

更多相关文章

  1. Android自带的下载功能,不需要断点续传、大文件下载、通知栏显示
  2. NDK进阶实例
  3. Android简易实战教程--第三十一话《自定义土司》
  4. android简单实例--------普通菜单optionMenu,上下文菜单ContextMe
  5. AlarmManager+Notification实现定时通知提醒功能
  6. Android(安卓)软键盘自动弹出与关闭实例详解
  7. Android(安卓)实现ListView的点击变色的实例
  8. Android中MenuInflater实例
  9. 【Android(安卓)基础】Android(安卓)LayoutInflater 简单入门

随机推荐

  1. 常用Android应用程序中的Intent动作
  2. Android -- 过滤器相关
  3. android 时区转换
  4. Android layout layout_weight属性理解
  5. Android 更改 Toast 的默认位置及自定义T
  6. Android Device Monitor无法查看data目录
  7. Android根据屏幕宽度缩放图片
  8. 代码混淆
  9. Android(安卓)Studio gradle 打包之非渠
  10. Android(安卓)手势检测实战 打造支持缩放