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

Ton*_*780 4 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);
Run Code Online (Sandbox Code Playgroud)

该符号显示在任务栏中,如果我点击该通知应用程序打开,但它是一个全新的活动(我猜是因为创建了一个新的Intent).因此,如果我在应用程序中打开了一个对话框,如果我关闭应用程序(单击主页)然后在通知栏中单击/单击应用程序图标,则该对话框无法打开.我该如何处理这个以便显示"旧/真实"活动?

tri*_*ggs 16

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

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

从上面的链接:

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

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


小智 7

//在你的活动中

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);
Run Code Online (Sandbox Code Playgroud)

//在你的清单中

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

android:launchMode="singleTop"
Run Code Online (Sandbox Code Playgroud)