Android 8.0以下及8.0以上通知栏创建,
private NotificationManager mNotifyManager;
private Notification.Builder builder;
private NotificationChannel channel = null;
int id = 1;
开始创建:
mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//ChannelId为"1",ChannelName为"Channel1"
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
System.out.println("当前为8.0以上版本");
channel = new NotificationChannel("1",
"Channel1", NotificationManager.IMPORTANCE_DEFAULT);
//是否在桌面icon右上角展示小红点
channel.enableLights(true);
//小红点颜色
channel.setLightColor(Color.GREEN);
//是否在久按桌面图标时显示此渠道的通知
channel.setShowBadge(true);
mNotifyManager.createNotificationChannel(channel);
//与channelId对应
builder = new Notification.Builder(getApplicationContext(), "1");
builder.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("内容下载")
.setContentText("下载中,请骚等")
//久按桌面图标时允许的此条通知的数量
.setNumber(3);
} else {
System.out.println("当前为8.0以下版本");
builder = new Notification.Builder(this);
builder.setContentTitle("内容下载")
.setContentText("下载中,请稍等")
.setSmallIcon(R.mipmap.ic_launcher);
}
下载开始,显示通知栏,
System.out.println("下载开始");
//开始时候,初始化进度条
builder.setProgress(100, 0, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mNotifyManager.notify(id, builder.build());
}
下载完成,更新通知栏,
System.out.println("下载完成");
//成功后将setProgress的两个变量设置为0,progress就会消失。setProgerss第三个参数的含义是,如果 能确定进度条执行的时间,就传入true,否则是false,此处直接传入false即可。
builder.setProgress(0, 0, false).setContentText("已经下载完成");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mNotifyManager.notify(id, builder.build());
}
下载中,更新通知栏进度条,
//更新进度条
int currentNum = (int) (100 * currentProgress / percent);
System.out.println("/n下载进度百分比为:" + currentNum + "下载进度值为:" + currentProgress + "/n下载总大小为:" + percent);
builder.setProgress(100, currentNum, false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mNotifyManager.notify(id, builder.build());
}
最后,清除通知栏。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
System.out.println("当前为8.0以上版本1");
mNotifyManager.deleteNotificationChannel("1");
}else{
System.out.println("当前为8.0以下版本1");
//移除通知栏
mNotifyManager.cancel(id);
}
注:这里有点问题,就是在8.0上如果是下载文件的通知,就会出现每更新一下进度条就有一个提示音,目前的解决办法就是在创建NotificationManager时设置低优先级:
NotificationManager.IMPORTANCE_DEFAULT
image.png
网友评论