欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

Android 8.0通知栏适配_更新Android 8.0后系统通知栏

程序员文章站 2021-12-30 07:14:51
...

Android每次升级都会要我们更改一下代码来兼容新的特性,那么这次也不意外。在新的Android O,也就是Android 8.0下通知的发送又要做更改了,不然的话不能正常显示。Android通知栏在项目开发中,还是用的比较多的,一般是这三个步骤来做Android通知栏。


1、获取通知栏管理器对象

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


2、创建通知对象,并设置ui

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    notificationBuilder = new Notification.Builder(UpdateService.this, "77");
}else{
    notificationBuilder = new Notification.Builder(UpdateService.this);
}
notificationBuilder.setWhen(System.currentTimeMillis())
        .setAutoCancel(false)
        .setContentTitle(app_name   getString(R.string.is_downing))
        .setProgress(100, 0, false)
        .setSmallIcon(android.R.drawable.stat_sys_download);
Notification notification;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    notification = notificationBuilder.build();
} else {
    //noinspection deprecation
    notification = notificationBuilder.getNotification();
}


3、发送通知

mNotificationManager.notify(id,notification); 


4、适配Android8.0(很重要,不然在Android 8.0下无法在通知栏发通知)

//兼容android8.0
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel("77", 
        getString(R.string.down_sucess), NotificationManager.IMPORTANCE_DEFAULT);
    channel.enableLights(false); //是否在桌面icon右上角展示小红点
    channel.setShowBadge(false); //是否在久按桌面图标时显示此渠道的通知
    channel.enableVibration(false);
    channel.setSound(null, null);
    notificationManager.createNotificationChannel(channel);
}


channelId为整数字符串,一定要和Notification.Builder(UpdateService.this, "77")里面的channelId一样才能发出通知哦,channelName最好使用汉字,因为通知栏上右滑出现设置按钮,点开设置按钮,可以看到这个通知channalName。