1.使用Notification
当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。
首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。getSystemService()方法接收一个字符串参数用于确定获取系统的某个服务,这里传入Context.NOTIFICATION_SERVICE。
NotificationManager manager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
接下来使用Builder构造器来创建Notification对象。可利用support库中(兼容)的NotificationCompat类来创建Notification对象。
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle("指定通知的标题内容")
.setContentText("指定通知的正文内容")
.setWhen(指定通知被创建的时间)
.setSmallIcon(设置显示在系统状态栏上的小图标)
.setLargeIcon(设置通知的大图标)
.build();
最后,使用NotificationManager.notify()方法,就可以发送通知。notify()方法接收两个参数,第一个参数是id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification对象。
manager.nofity(1, notificaion);
当要实现通知的点击效果,需要使用PendingIntent。PendingIntent倾向于在某个合适的时机去执行某个动作。所以也可以把PendingIntent简单理解为延迟执行的Intent。
PendingIntent主要提供了几个静态方法用于获取PendingIntent的实例。可以根据需求来选择使用getActivity()方法、getBroadcast()方法、getService()方法。传入四个参数通常是:(context, requestCode, intent, flags)。
对于只是Intent中附带的数据不同的多个PendingIntent,其实是同一个PendingIntent。当这些PendingIntent当作参数传入通知并发送的时候,只有最后发送的通知是有点击效果的。可以通过设置不同的requestConde和Intent.filterEquals来使两个PendingIntent保持不同。
Flags为PendingIntent.FLAG_CANCEL_CURRENT,则只有最后一次PendingIntent有效,之前的都无效了(之前的通知无法点击)。
Flags为PendingIntent.FLAG_UPDATE_CURRENT,则所有对应的Intent里面的extra被更新为最新的。(之前的通知点击后内容都是最后的通知)。
利用Builder构造器在Notification中设置PendingIntent,之后再设置setAutoCancle()方法来实现点击取消通知,这样,通知的点击效果就完整的实现了。
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle("指定通知的标题内容")
.setContentText("指定通知的正文内容")
.setWhen(指定通知被创建的时间)
.setSmallIcon(设置显示在系统状态栏上的小图标)
.setLargeIcon(设置通知的大图标)
.setContentIntent(pi)//设置PendingIntent
.setAutoCancel(true)//设置点击取消
.build();
manager.nofity(1, notificaion);