Android中的前台通知启动新的活动(通过pendingIntent)而不是现有的

Posted

技术标签:

【中文标题】Android中的前台通知启动新的活动(通过pendingIntent)而不是现有的【英文标题】:Foreground Notification in Android starts new Activity (via pendingIntent) instead of existing one 【发布时间】:2012-03-26 19:55:08 【问题描述】:

我有一个音乐流应用程序,我想在音乐流式传输时显示前台通知。我在单独的服务中进行流式传输,用于前台通知的代码如下:

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, PlayerActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this,getString(R.string.app_name),
                   getString(R.string.streaming), pendingIntent);
startForeground(4711, notification);

该符号显示在任务栏中,如果我单击通知,应用程序将打开,但这是一个全新的活动(我猜是因为创建了一个新的 Intent)。所以如果我有例如如果我关闭应用程序(单击主页)然后滑动/单击通知栏中的应用程序图标,则在应用程序中打开一个对话框。我该如何处理才能显示“旧/真实”活动?

【问题讨论】:

【参考方案1】:

您需要为此使用标志。你可以在这里阅读标志:http://developer.android.com/reference/android/content/Intent.html

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

从上面的链接:

如果设置,如果 Activity 已经在历史堆栈的顶部运行,则不会启动它。

如果一个尚未运行,单个顶部标志将启动一个新的活动,如果有一个实例已经在运行,那么意图将被发送到onNewIntent()

【讨论】:

很遗憾你没有提到android:launchMode="singleTop" 作为用户***.com/a/13876977/4548520【参考方案2】:

//在你的活动中

Notification notification = new Notification(R.drawable.ic_stat_notification, getString(R.string.app_name), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, PlayerActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this,getString(R.string.app_name),
                   getString(R.string.streaming), pendingIntent);
startForeground(4711, notification);

//在你的清单中

android:name="com.package.player.MusicPlayerActivity"

android:launchMode="singleTop"

【讨论】:

完美的解决方案,谢谢。

以上是关于Android中的前台通知启动新的活动(通过pendingIntent)而不是现有的的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用、活动状态(运行、未运行、前台/后台)

Android:如何从活动活动中关闭前台活动?

从通知启动时防止重新创建活动活动

更新通过通知点击带到前台的当前活动的正确方法是啥?

Android 通知 setFullScreenIntent 不会自动启动活动

当活动从后台(暂停)到前台时重新创建 Android 活动