一直也没有写过通知栏的用法,今天学习正好看到这里,所以在这里进行一下总结。
1.Notification.Builder的相关方法
- setWhen:设置推送时间,格式为“小时:分钟”。推送时间在通知栏右方显示。
- setShowWhen:设置是否显示推送时间。
- setUsesShronometer:设置是否显示计时器。为true时不显示推送时间,动态显示从通知被推送到当前的时间间隔,以“分钟:秒钟”格式显示。
- setSmallIcon:设置状态栏里面的图标(小图标)。
- setTicker:设置状态栏里面的提示文字。
- setLargeIcon:设置通知栏里面的图标(大图标)。
- setContentTitle:设置通知栏里面的标题文字。
- setContentText:设置通知栏里面的内容文本。
- setSubText:设置通知栏里面的附加说明文本,位于内容文本下方。若调佣该方法,则setProgress的设置失效。
- setProgress:设置进度条与当前进度。进度条位于标题文本与内容文本中间。
- setNumber:设置通知栏右下方的数字,可与setProgress联合使用,表示当前的进度数值。
- setContentInfo:设置通知栏右下方的文本。若调用该方法,则setNumber的设置失效。
- setContentIntent:设置内容的延迟意图PendingIntent,点击该通知触发该意图。通常调用PendingIntent的getActivity方法获得延迟意图对象,getActivity表示点击后跳转到该页面。
- setDeleteIntent:设置删除的延迟意图PendingIntent,滑掉该通知时触发该动作。
- setAutoCancel:设置该通知是否自动清除。若为true,则点击通知后,通知会自动消失,若为flase,则点击该通知后,通知不会消失。
- setContent:设置一个定制的通知栏视图RemoteViews,用于取代Builder的默认视图模板。
- build:构建方法。在以上参数都设置完毕后,调用该方法返回Notification对象。
2.上述方法使用注意事项
- setSmallIcon方法必须调用,否则不会显示通知消息。
- setWhen与setUsesChronometer同时只能调用其中一个,即推送时间与计数器无法同时显示,因为它们都位于通知栏右边。
- setSubText与setProgress同时只能调用其中一个,因为附加说明与进度条都位于标题文本下方。
- setNumber与setContentInfo同时只能调用其中一个,因为计数值与提示都位于通知栏右下方。
3.NotificationManager的相关方法
- notify:推送指定消息到通知栏
- cancel:取消指定消息。调用该方法后,通知栏中的指定消息将消失
- cancelAll:取消所有消息(待续)
4.普通消息示例
private void sendSimpleNotify(String title,String message){
count++;
//从系统服务中获取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//调用后只有8.0以上执行
createNotifyChannel(notifyMgr,this,"channel_id");
//创建一个跳转到活动页面的意图
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//创建一个用于页面跳转的延迟意图
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//创建一个通知消息的构造器
Notification.Builder builder = new Notification.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//Android8.0开始必须给每个通知分配对应的渠道
builder = new Notification.Builder(this,"channel_id");
}
builder.setContentIntent(contentIntent)//设置内容的点击意图
.setAutoCancel(true)//设置是否允许自动清除
.setSmallIcon(R.mipmap.ic_launcher)//设置状态栏里的小图标
.setTicker("提示消息来啦")//设置状态栏里面的提示文本
.setWhen(System.currentTimeMillis())//设置推送时间,格式为"小时:分钟"
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏里面的大图标
.setContentTitle(title)//设置通知栏里面的标题文本
.setContentText(message);//设置通知栏里面的内容文本
//根据消息构造器创建一个通知对象
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
Notification notify = builder.build();
//使用通知管理器推送通知,然后在手机的通知栏就会看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 创建通知渠道,Android8.0开始必须给每个通知分配对应的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//创建一个默认重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否绕过请勿打扰模式
channel.enableLights(true);//闪光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//锁屏显示通知
channel.setLightColor(Color.RED);//指定闪光时的灯光颜色
channel.canShowBadge();//桌面ICON是否可以显示角标
channel.enableVibration(true);//是否可以震动
channel.getGroup();//获取通知渠道组
channel.setVibrationPattern(new long[]{100,100,200});//震动的模式
channel.shouldShowLights();//是否会闪光
notifyMgr.createNotificationChannel(channel);
}
}
这里注意我们用到一个count的变量,用来区分每一条消息,所以count一定要有变化,否则回覆盖掉之前的一条。
5.计时消息示例
private void sendSimpleNotify(String title,String message){
count++;
//从系统服务中获取通知管理器
NotificationManager notifyMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//调用后只有8.0以上执行
createNotifyChannel(notifyMgr,this,"channel_id");
//创建一个跳转到活动页面的意图
Intent clickIntent = new Intent(this,MessageActivity.class);
clickIntent.putExtra("flag",count);
//创建一个用于页面跳转的延迟意图
PendingIntent contentIntent = PendingIntent.getActivity(this,count,clickIntent
,PendingIntent.FLAG_UPDATE_CURRENT);
//创建一个通知消息的构造器
Notification.Builder builder = new Notification.Builder(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//Android8.0开始必须给每个通知分配对应的渠道
builder = new Notification.Builder(this,"channel_id");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
builder.setContentIntent(contentIntent)//设置内容的点击意图
.setAutoCancel(false)//设置是否允许自动清除
.setUsesChronometer(true)//设置是否显示计数器
.setProgress(100,60,false)//设置进度条与当前进度
.setNumber(99)//设置通知栏右下方的数字
.setSmallIcon(R.mipmap.ic_launcher)//设置状态栏里的小图标
.setTicker("提示消息来啦")//设置状态栏里面的提示文本
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏里面的大图标
.setContentTitle(title)//设置通知栏里面的标题文本
.setContentText(message);//设置通知栏里面的内容文本
//根据消息构造器创建一个通知对象
Notification notify = builder.build();
//使用通知管理器推送通知,然后在手机的通知栏就会看到消息
notifyMgr.notify(count,notify);
}
}
/**
* 创建通知渠道,Android8.0开始必须给每个通知分配对应的渠道
* @param notifyMgr
* @param ctx
* @param channelId
*/
private void createNotifyChannel(NotificationManager notifyMgr,Context ctx,String channelId){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
//创建一个默认重要性的通知渠道
NotificationChannel channel = new NotificationChannel(channelId,"Channel",NotificationManager.IMPORTANCE_DEFAULT);
channel.setSound(null,null);
channel.setShowBadge(true);
channel.canBypassDnd();//可否绕过请勿打扰模式
channel.enableLights(true);//闪光
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);//锁屏显示通知
channel.setLightColor(Color.RED);//指定闪光时的灯光颜色
channel.canShowBadge();//桌面ICON是否可以显示角标
channel.enableVibration(true);//是否可以震动
channel.getGroup();//获取通知渠道组
channel.setVibrationPattern(new long[]{100,100,200});//震动的模式
channel.shouldShowLights();//是否会闪光
notifyMgr.createNotificationChannel(channel);
}
}
通知相关的内容今天就说这么多了。如果小伙伴们有疑问可以在评论区和我讨论。