我有一个服务,会显示一条通知,希望每次用户点击通知时都能跳转到我的应用程序的特定活动页面。通常情况下,它将是用户最后查看的活动页面,但并非总是如此。
如果该活动已经启动过,则应返回到该活动,如果没有,则应在应用程序任务中打开它,并将其添加到活动任务列表中。
此外,在某些情况下,根据服务逻辑,我希望更改通知的意图,以便将其指向不同的活动页面。
如何实现?是否可以在不创建新通知并取消旧通知的情况下进行操作?是否也可以在不创建新任务或活动实例的情况下实现?
我有一个服务,会显示一条通知,希望每次用户点击通知时都能跳转到我的应用程序的特定活动页面。通常情况下,它将是用户最后查看的活动页面,但并非总是如此。
如果该活动已经启动过,则应返回到该活动,如果没有,则应在应用程序任务中打开它,并将其添加到活动任务列表中。
此外,在某些情况下,根据服务逻辑,我希望更改通知的意图,以便将其指向不同的活动页面。
如何实现?是否可以在不创建新通知并取消旧通知的情况下进行操作?是否也可以在不创建新任务或活动实例的情况下实现?
自从平台版本11以来,您可以使用Notification.Builder构建通知。 v4支持库具有等效的类NotificationCompat.Builder。
一旦发送了通知,您无法更改Activity,但是可以使用新的Intent更新通知。创建PendingIntent时,请使用FLAG_CANCEL_CURRENT标志。当您调用NotificationManager.notify()发送新通知时,请使用现有通知的ID。
此外,您应该注意如何启动应用程序。状态栏通知指南告诉您如何设置后退堆栈。
一旦您发送了通知,就无法更改活动。
您可以在任务堆栈中启动一个活动,这不是问题,请查看此处的教程中的通知服务:
http://blog.blundell-apps.com/notification-for-a-user-chosen-time/
您需要在通知上设置一个待处理意图:
// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, SecondActivity.class), 0);
// Set the info for the view that shows in the notification panel.
notification.setLatestEventInfo(this, title, text, contentIntent);
您可以看到,待处理意图使用了普通意图 "new Intent(this, SecondActivity.class
",因此如果您想要特定的行为(例如将其置于顶部而不是启动新活动),请像通常一样向该意图添加标志。例如 FLAG_ACTIVITY_REORDER_TO_FRONT(类似这样)