管理通知



复用:



当你需要为同一类型的时间多次发送通知的时候,切忌每次都创建新的实例。繁殖,应当考虑对先前使用的通知实例进行更新,添加或修改一些设定值。





- Gmail:



当新邮件到来,Gmail会在通知中递增邮件数量并显示每封邮件的摘要。这称为“堆积”通知。参见通知设计向导。





更新通知





- 已经发起的通知拥有一个ID



- 更新或者创建一个NotificationCompat.Builder,然后构建一个Notification对象,用同样的ID发送之。此时,如果对应ID的通知已经存在,那么更新它;否则,创建新的通知。



- 代码实例:



mNotificationManager =

       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;

mNotifyBuilder = new NotificationCompat.Builder(this)

   .setContentTitle("New Message")

   .setContentText("You've received new messages.")

   .setSmallIcon(R.drawable.ic_notify_status)

numMessages = 0;
// Start of a loop that processes data and then notifies the user
...

    mNotifyBuilder.setContentText(currentText)

       .setNumber(++numMessages);

   // Because the ID remains unchanged, the existing notification is

   // updated.

    mNotificationManager.notify(

            notifyID,

            mNotifyBuilder.build());
...



- 它的效果如图:



android 指定时间重复发送本地通知_最近使用





移除通知





通知保持可见,直到下列事件之一发生:



- 用户清除了通知:逐条删除或者通过“清除全部”命令



- 用户点击了通知,并且在创建通知之初调用了setAutoCancel()方法



- 你对指定的ID调用了cancel()方法。此方法同样会删除进行中的通知。



- 你调用了cancelAll()方法。这将移除你之前发出的所有通知





------------------------------------------------------------------------------------



启动活动时保存导航





- 当你从一个通知启动活动时,你必须保留用户所希望的导航体验:



> 按回退键应当通过应用正常的工作流将用户带回到Home屏。



> 点击“最近使用”则会将刚才启动的活动显示为一个单独的任务。





- 要做到这一点,应当从一个全新的任务来启动活动



- 如何配置PendingIntent来得到一个全新的任务?这取决于你的活动的性质:





常规活动:



- 这指的是,你启动的活动是应用程序正常工作流的一部分。此时,创建一个PendingIntent来开始新的任务,同时要提供给它一个back stack以重现在应用程序中正常的回退行为。





- 如在Gmail应用中,如果通过通知栏打开单封邮件,系统会首先进入Gmail,显示邮件列表再打开对应的邮件。用户回退时也要路过这些打开的活动。





这与你当前是否恰好在那个应用之中没有关系。例如,你正在Gmail中书写一封邮件,此事通过通知栏点开一封邮件,所经历的回退顺序仍然是打开的邮件->收件箱->Home屏,而不会回退到之前的书写屏。我认为,原因在于,书写和后来打开邮件这两个操作并不在同一个任务中。





特殊活动