Android O(8.0)以上系统使用通知

前言

  根据《第一行代码 第二版》第八章中通知的写法,在我自己手机上调试的时候没有任何反应。
查阅资料后发现,因为我的手机系统是MIUI10.3版本,为Android 9系统,而在Android 8系统上对通知进行了修改,引入了消息通道 (Notification Channel) 的使用。目的是为了方便不同信息的管理与分类,提高用户体验。

创建通知

  一个打的不同就是NotificationCompat.Builder中,只有一个Context参数的构造方法已经被标为过时,而另一个构造 方法需要传入一个 channelID 的字符串参数:
Builder构造方法

  • 这个channelID就是一个消息通道的唯一ID名称
  • 其他的还是像以前一样连缀方法最后Build

建立消息通道

  如果想要通知正常的显示出来,那就需要一个能收纳该信息的信息通道,需要两个步骤:

  • 创建消息通道
  • 提交给通知管理器

创建消息通道:

//id 就是上面创建消息需要的消息通道的ID
//name 是该消息通道的名称
//最后一个参数是该消息通道的重要性
NotificationChannel channel=new NotificationChannel("id","name",NotificationManager.IMPORTANCE_HIGH);
channel.enableLights(true);//允许呼吸灯闪烁
channel.setDescription("describe");//设置该通道的描述
channel.setLightColor(Color.RED);
//当然还可以再使用其他方法

  最后一个参数目前只能在NotificationManager类取IMPORTANCE_NONE-IMPORTANCE_HIGH,对应0-4几个取值(MAX不能用),最高的HIGH会像QQ微信一样出横幅,前提是用户设置了允许。

当然Notification里的setPriority方法也被标记为了过时(上面的消息通道重要性参数取代了该方法):
优先级过时
  一样的还有设置震动也是需要在消息通道里设置,在Builder中的方法也被标为过时

提交给通知服务:
  这步很简单:

NotificationManager manager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);//获取消息服务
manager.createNotificationChannel(channel);//创建消息通道

使用通知

Notification notification=new Notification.Builder(this,"id")
        .setContentTitle("Title")
        .setContentText("This is Content")
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher_round))
        .build();
manager.notify(55520,notification);

效果

打开程序:
界面
状态栏:
状态栏
在手机的消息管理设置里可以看到一个app的所有消息通道:
app消息通道
用户可以设置每一个消息通道的权限:
消息通道权限
注意这里如果打开悬浮通知并且消息通道重要性设置最高(HIGH)就会有下图的效果:

在悬浮通知
最后贴两张QQ的消息管理设置(MIUI10默认的):
QQ消息通道
权限

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫空-NS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值