Android 单击通知后返回到当前正在运行的活动
我有以下问题: 我写了一个android服务——一个音乐播放器——在后台运行,并在启动时发出通知。单击此通知将打开允许与此播放机交互的活动A。这个很好用 问题是当我运行第三方活动(例如,web浏览器)并单击通知时。单击会将我带到活动A,但单击后退按钮(这就是问题所在)会将我带到主屏幕。相反,我想 恢复以前运行的活动,即web浏览器 有人知道怎么做吗Android 单击通知后返回到当前正在运行的活动,android,android-intent,android-activity,android-notifications,android-pendingintent,Android,Android Intent,Android Activity,Android Notifications,Android Pendingintent,我有以下问题: 我写了一个android服务——一个音乐播放器——在后台运行,并在启动时发出通知。单击此通知将打开允许与此播放机交互的活动A。这个很好用 问题是当我运行第三方活动(例如,web浏览器)并单击通知时。单击会将我带到活动A,但单击后退按钮(这就是问题所在)会将我带到主屏幕。相反,我想 恢复以前运行的活动,即web浏览器 有人知道怎么做吗 private void initNotification(){ Intent resultIntent = new Intent
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());
}
我不认为这是你需要处理的事情。这取决于已经运行的应用程序 我刚刚试了两次。在第一个案例中,whatsapp正在运行,然后打开一个通知并按下后退按钮,我被带回whatsapp。在第二种情况下,我让chrome运行,点击通知返回,我被带回到主屏幕
在第二种情况下,chrome可能会对其当前活动调用finish(),该活动会被销毁,并且backbackback中没有更多的活动,因此它会将您带回主屏幕 您的问题是如何使用
TaskStackBuilder
。不幸的是,这个类对您希望如何管理应用程序做了很多假设。使用TaskStackBuilder
构建pendingent
堆栈时,它会将以下标志添加到“根”Intent
:
intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_TASK_ON_HOME);
(注意:此代码段来自Android 4.1.1中的TaskStackBuilder
)
由于设置了主页上的Intent.FLAG\u ACTIVITY\u TASK\u
,因此它会在主屏幕的顶部启动任务,而不是在用户当前任务的顶部启动任务
如果可以避免使用TaskStackBuilder
,则可以绕过此问题。如果确实需要构建活动堆栈,可以使用pendingent.getActivities()
,在这里可以控制在每个Intent
中设置哪些标志。否则,只需使用pendingent.getActivity()
创建放入通知中的pendingent
注意:编辑以添加示例代码
试试这个:
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());
}
谢谢你的快速回复。我用Firefox和后台进程(任务管理器)的通知在我的设备上进行了尝试。然后返回Firefox。然而,当我点击我的应用程序生成的通知时,它会返回主菜单。不,这实际上是你可以控制的行为。这完全取决于您在通知
中的挂起内容
中设置的意图
标志。再次感谢!我明天会试试,让你知道这是怎么回事。好消息。我以前从未用过这面旗子。嗨,大卫!谢谢你的回答。我试图省略TaskStackBuilder并使用PendingEvent.getActivities(),但结果保持不变。您能否简要介绍一下(可能使用一些伪代码)如何将taskStackBuilder与PendingEvent.getActivities()结合使用?先谢谢你。