我有一个服务,它显示一个通知,我希望每次用户按下它时都能转到我的应用程序的特定活动。通常它会是用户显示的最后一个,但并非总是如此。
如果活动之前启动过,它应该返回到它,如果没有,它应该在应用程序的任务中打开它,将它添加到活动任务中。
此外,在某些情况下,根据服务的逻辑,我希望更改通知的意图,以便它针对不同的活动。
我怎么做?是否可以不创建新通知并取消之前的通知?是否也可以不创建新任务或活动实例?
我有一个服务,它显示一个通知,我希望每次用户按下它时都能转到我的应用程序的特定活动。通常它会是用户显示的最后一个,但并非总是如此。
如果活动之前启动过,它应该返回到它,如果没有,它应该在应用程序的任务中打开它,将它添加到活动任务中。
此外,在某些情况下,根据服务的逻辑,我希望更改通知的意图,以便它针对不同的活动。
我怎么做?是否可以不创建新通知并取消之前的通知?是否也可以不创建新任务或活动实例?
不,一旦您发送通知,就不可能更改活动。
您可以在没有问题的任务堆栈上启动一个 Activity,请在此处查看教程中的通知服务:
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(类似的东西)
从平台版本 11 开始,您可以使用 Notification.Builder 构建通知。v4 支持库有一个等效类 NotificationCompat.Builder。
发送通知后,您无法更改 Activity,但可以使用新 Intent 更新通知。创建 PendingIntent 时,使用标志 FLAG_CANCEL_CURRENT。当您发送新通知时,请在调用 NotificationManager.notify() 时使用现有通知的 ID。
此外,您应该小心如何启动您的应用程序。状态栏通知指南告诉您如何设置后台堆栈。