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)而不是现有的的主要内容,如果未能解决你的问题,请参考以下文章