由于测试反馈才发现,之前写好的通知栏下载更新在部分手机上显示不出,导致用户无法更新。起初因为强调是小米手机,所以没有往Android8.0的方向去想,默默的认为是更新方法错误,查看过log日志后可以正常更新,只是无法将更新下载的进度条显示在通知栏,这才想到Android8.0对于通知栏的权限管理,所以查阅资料之后,适配了8.0版本的问题。
首先贴上官方通知文档:https://developer.android.google.cn/training/notify-user/build-notification
Android O(也就是SDK26版本) 引入了 通知渠道(Notification Channels)其中新加了多个属性:
所以看完API之后,才发现Android8.0中,对于通知栏的下载更新显示需要重新定义,拿个人定义的工具类来讲解,需要优先定义一个应用中唯一的ID和Name
private static final int YOUR_NOTIFICATION_ID = 0x002;
private static final String YOUR_CHANNEL_ID = "YOUR_NOTIFY_ID";
private static final String YOUR_CHANNEL_NAME = "YOUR_NOTIFY_NAME";
这里需要说明一下,官方的建议ID和Name字符尽量简短,不易过长,否则会被截取.
@RequiresApi(api = Build.VERSION_CODES.O)
public void CreateNotificationChannel(NotificationManager notificationManager) {
NotificationChannel channel = new NotificationChannel(YOUR_CHANNEL_ID,YOUR_CHANNEL_NAME,Notifi cationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
}
public void CreateNotification(String title, String content){
if (Build.VERSION.SDK_INT >= 26) {
createNotificationChannel(getManager());
notification = new Notification.Builder(getApplicationContext(), YOUR_CHANNEL_ID).build();
} else {
notification = new Notification();
}
//设置常规属性值
notification.icon = ;
notification.flags = ;
notification.tickerText = ;
notification.when = ;
notification.defaults = ;
notification.contentView = ;
}
常用字段:
contentIntent 设置PendingIntent对象,点击时发送该Intent
defaults 添加默认效果
flags 设置flag位,例如FLAG_NO_CLEAR等
icon 设置图标
sound 设置声音
tickerText 显示在状态栏中的文字
when 发送此通知的时间戳
工具类NotificationUtils 中声明:
private NotificationManager manager;
private NotificationManager getManager(){
if (manager == null){
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
return manager;
}
二:另外关于通知栏下载更新完成后的安装,也需要注意
判断是否为8.0,如果是的话,需要检测“允许未知来源”
//请求安装未知应用来源的权限
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);}
//请求安装未知应用来源的权限
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);}