Notification

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当作参数传入通知并发送的时候,只有最后发送的通知是有点击效果的。可以通过设置不同的requestCondeIntent.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);

你可能感兴趣的:(Notification)