在Android中更改通知意图

3

我有一个服务,会显示一条通知,希望每次用户点击通知时都能跳转到我的应用程序的特定活动页面。通常情况下,它将是用户最后查看的活动页面,但并非总是如此。

如果该活动已经启动过,则应返回到该活动,如果没有,则应在应用程序任务中打开它,并将其添加到活动任务列表中。

此外,在某些情况下,根据服务逻辑,我希望更改通知的意图,以便将其指向不同的活动页面。

如何实现?是否可以在不创建新通知并取消旧通知的情况下进行操作?是否也可以在不创建新任务或活动实例的情况下实现?


我总是尽力而为。如果看起来不是这样,对不起。 - android developer
2个回答

1

自从平台版本11以来,您可以使用Notification.Builder构建通知。 v4支持库具有等效的类NotificationCompat.Builder。

一旦发送了通知,您无法更改Activity,但是可以使用新的Intent更新通知。创建PendingIntent时,请使用FLAG_CANCEL_CURRENT标志。当您调用NotificationManager.notify()发送新通知时,请使用现有通知的ID。

此外,您应该注意如何启动应用程序。状态栏通知指南告诉您如何设置后退堆栈。


我不确定我理解了。您如何更改通知的意图?是否可以添加/修改意图的额外数据?您如何使其转到任何您希望的活动?通过将活动的类名添加到额外数据中吗? - android developer

1

一旦您发送了通知,就无法更改活动。

您可以在任务堆栈中启动一个活动,这不是问题,请查看此处的教程中的通知服务:

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类似这样


那么你的意思是我不能修改通知的意图吗?在新版本的Android上也是如此吗?因为它们有一种不同的创建通知的方式? - android developer
@androiddeveloper 是的,一旦您将其发送到系统后就无法修改它。不过,您可以发送不同的通知,这是可以的。 - Blundell
我明白了。为什么这是不可能的,但更改通知中的视图是可能的呢?我甚至看到一个应用程序在通知中显示更新的图表。我以前认为它的功能非常有限,就像应用程序小部件一样,所以我确定这是不可能的。 - android developer
1
@androiddeveloper 如果你认为可能的话,就去试试吧。当你有一些能够工作或者不能工作的代码时,回到stackoverflow上来。 - Blundell
我相信你。这只是一件奇怪的事情。谢谢你的帮助。你现在会得到“V”,还有一个+1。 :) - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接