Android notification
当app需要给用户提示信息,但是该app又没有运行在前台的时候,就可以利用通知
创建通知
由Notification.Builder创建一个Notification对象,进行各种属性的配置,其中必须配置的属性如下
小图标,使用setSamllIcon()方法设置。
标题,使用setContentTitle()方法设置。
文本内容,使用setContentText()方法设置。
/*
channel的构造函数有三个参数 channel的id,name,和优先级。 创建完channel后通过 NotificationManager的createNotificationChannel(channel)方法添加chanel,并在在notification里设置setChannelId。
*/
String CHANNEL_ID = "my_channel_01";
CharSequence name = "my_channel_01";
String description = "你好世界";
int importance = NotificationManager.IMPORTANCE_LOW;
//Android 8.0开始需要为通知设置channel
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.enableVibration(true);
channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
manager.createNotificationChannel(channel);
Notification notification = map.get(id);
if(notification == null) {
notification = new Notification.Builder(this)
//设置通知的标题
.setContentTitle("This is content title")
// 设置通知的详细信息
.setContentText(text)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setChannelId(CHANNEL_ID)
.build();
}
发送通知
通知由NotificationManager发送,它是系统级服务,获取方法是(NotificationManager) getSystemService
(NOTIFICATION_SERVICE),获取到notification对象之后,就可以调用NotificationManager.notify()发送通知
更新与移除通知
使用NotificationManager.notify()发送通知的时候,需要传递一个唯一id作为标识符,用于标识这个通知,有时候并不是要无限添加新的通知,而是要更新原有的通知信息,当你发送通知的时候使用的id是一样的话,则会将通知更新为新的notification的内容,而使用cancel(int)来移除一个指定的通知,也可以使用cancelAll()移除所有的通知。
通过点击通知跳转活动
如果我们想要用户点击app发出的通知有反应,比如进入进入一个页面,这里就需要用到pendingIntent.
Intent和PendingIntent的区别,PendingIntent可以看做是对Intent的包装,通过名称可以看出PendingIntent用于处理即将发生的意图,而Intent用来用来处理马上发生的意图。而对于通知来说,它是一系统级的全局通知,并不确定这个意图被执行的时间。当在应用外部执行PendingIntent时,因为它保存了触发应用的Context,使得外部应用可以如在当前应用中一样,执行PendingIntent里的Intent,就算执行的时候响应通知的应用已经被销毁了,也可以通过存在PendingIntent里的Context照常执行它,并且还可以处理Intent所带来的额外信息。
//设置pendingIntent让用户点击通知时跳转活动。
Intent intent = new Intent(this,NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0 ,intent ,0 );
其中第四个参数是用于标识PendingIntent的构造选择
* FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。
* FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
* FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
* FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用
其它Notification设置
设置当用户点击完通知操作后,通知图标就消失:.setAutoCancel(true)
设置通知展开的长文本内容:setStyle(new Notification.BigTextStyle().bigText("文本内容"))