我有以下问题: 我编写了一个 Android 服务 - 一个音乐播放器 - 它在后台运行并在启动时发出通知。单击此通知将打开 Activity A,允许与该玩家交互。这工作得很好。
问题是当我运行第三方 Activity (例如网络浏览器)并且单击通知时。单击此按钮会将我带到 Activity A,但单击“后退”按钮(这就是问题所在)会将我带到主屏幕。相反,我想 恢复之前运行的 Activity ,即网络浏览器。
有人知道怎么做吗?
private void initNotification(){
Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
//resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(AudioPlayerActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
stackBuilder.getIntents();
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(...);
mBuilder.setContentTitle("...");
mBuilder.setContentText("...");
mBuilder.setContentIntent(resultPendingIntent);
// create a notification manager that then displays the notification
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
最佳答案
您的问题是使用TaskStackBuilder
。不幸的是,此类对您希望如何管理应用程序做出了很多假设。当您使用 TaskStackBuilder
构造 PendingIntent
堆栈时,它会将以下标志添加到“根”Intent
:
intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_TASK_ON_HOME);
(注意:此代码 fragment 来自 Android 4.1.1 中 TaskStackBuilder
的源代码)
由于设置了 Intent.FLAG_ACTIVITY_TASK_ON_HOME
,它会在主屏幕顶部启动您的任务,而不是在用户当前任务之上启动它。
如果您可以避免使用TaskStackBuilder
,则可以解决此问题。如果您确实需要构建 Activity 堆栈,可以使用 PendingIntent.getActivities()
,您可以在其中控制每个 Intent
中设置哪些标志。否则,只需使用 PendingIntent.getActivity()
创建您放入 Notification
中的 PendingIntent
。
注意:编辑以添加示例代码
试试这个:
private void initNotification(){
Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(...);
mBuilder.setContentTitle("...");
mBuilder.setContentText("...");
mBuilder.setContentIntent(resultPendingIntent);
// create a notification manager that then displays the notification
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
关于android - 单击通知后返回当前正在运行的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30874000/