我有以下方案,我正在尝试修复:
无论其 当按下后退键时,从App导航出来如下: Activity_A(来自通知) - > Acivity_B-> Activity_A->应用关闭。
我想要实现的是,点击通知后,Activity_B将完成,同一任务的Activity_A将呈现给用户。
我经历了无数的答案和问题,几乎描述了相同的情景,所有答案实施试验都没有解决我的问题。
如果我参加我的主要活动,有一件事给了我我想要的东西android:launchMode="singleInstance"
但随后每个活动调用似乎都启动了新应用。
您可以在下面找到一些代码:
final Intent notificationIntent = new Intent(getApplicationContext(), MyDevices.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
final PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent,0);
final Notification notification = new Notification.Builder(
getApplicationContext())
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(mNotificationTitle)
.setOngoing(false)
.setContentText(mNotificationMessage)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL).build();
notificationManager.notify(1,notification);
答案 0 :(得分:1)
您是否尝试设置singleTask而不是singleInstance? 此外,您可以尝试实现onActivityResult,以便在从activityA返回时完成activityB。
如果没有,我建议您检查我的库以处理活动导航:https://github.com/yayaa/TheActivityManager
修改强>
为了更好地理解singleTask和singleInstance之间的区别,您可以从launchMode源文档中查看以下描述。
“singleTask”和“singleInstance”模式在一个方面也各不相同:“singleTask”活动允许其他活动成为其任务的一部分。它始终是其任务的根源,但其他活动(必然是“标准”和“单一活动”)可以启动到该任务中。另一方面,“singleInstance”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,则该活动被分配给另一个任务 - 就像FLAG_ACTIVITY_NEW_TASK在意图中一样
我能看到的唯一警告就是下面的一个警告,如果你知道自己在做什么,并且确定你想要什么,那么在我看来并不那么重要。
singleTask和singleInstance - 不适合大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同。
让您的应用程序针对多个用例进行测试,它应该没问题。由于您的应用程序接收推送通知,我认为这是您应该采用的方式。
答案 1 :(得分:0)
没有什么可以只在你的B_Activity中添加这个功能。只要你离开就完成活动。这是一种很好的做法。
protected void onUserLeaveHint() {
try{
super.onUserLeaveHint();
finish();
}catch(Exception ex){
//Something went wrong.
}
}
答案 2 :(得分:0)
接受的答案并不好。对此行为使用特殊启动模式是不正确的,即使它可能适用于此特定情况。一般情况下,使用singleTask
或singleInstance
启动模式不是正确的方法,通常会导致比解决方案更多的问题。
您不需要任何特殊的启动模式来处理此问题。你只是缺少Intent.FLAG_ACTIVITY_NEW_TASK
。这应该可以在不使用任何特殊启动模式的情况下正常工作,只需像这样创建通知Intent:
final Intent notificationIntent = new Intent(getApplicationContext(),
MyDevices.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
Intent.FLAG_ACTIVITY_CLEAR_TASK
的{{3}}对此也很清楚。它说:
如果在传递给Context.startActivity()的Intent中设置,则此标志将为 导致任何与活动相关联的现有任务 在活动开始前清除。也就是活动 成为一个空的任务的新根,和任何旧的任务 活动结束了。 这只能与。一起使用 FLAG_ACTIVITY_NEW_TASK 强>