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

时间:2012-03-09 10:50:27

标签: android android-intent android-service android-notifications android-pendingintent

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

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)。所以如果我有例如如果我关闭应用程序(单击主页),然后在通知栏中单击/单击应用程序图标,则应用程序中打开的对话框未打开。我如何处理这个以便显示“旧/真实”活动?

3 个答案:

答案 0 :(得分:16)

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

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

从上面的链接:

  

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

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

答案 1 :(得分:3)

//在您的活动中

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"

答案 2 :(得分:0)

在创建通知时,只需使用PendingIntent:

PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(),
            0, new Intent(getActivity(), WantedActivity.class), 0);

并且不要忘记在Notification Builder中设置它:

.setContentIntent(pendingIntent)