Android 通过intent返回到以前的活动
我得到了以下呼叫流: 外部应用->我的活动A->打开浏览器->我的活动BAndroid 通过intent返回到以前的活动,android,android-intent,Android,Android Intent,我得到了以下呼叫流: 外部应用->我的活动A->打开浏览器->我的活动B 从外部应用程序,通过startActivityForResult可以启动我的活动A。活动A可以打开浏览器查看网站,从网站,用户可以单击链接并打开活动B的链接。现在我想关闭B并返回A。我该怎么办?如果我在B上调用finish(),我会看到浏览器。您可以使用Intent.FLAG\u activity\u CLEAR\u TOPIntent标志从活动B再次启动活动A。在此之前,您还需要更改清单中活动A的启动模式,将其设置为非标
从外部应用程序,通过
startActivityForResult
可以启动我的活动A。活动A可以打开浏览器查看网站,从网站,用户可以单击链接并打开活动B的链接。现在我想关闭B并返回A。我该怎么办?如果我在B上调用finish()
,我会看到浏览器。您可以使用Intent.FLAG\u activity\u CLEAR\u TOP
Intent标志从活动B再次启动活动A。在此之前,您还需要更改清单中活动A的启动模式
,将其设置为非标准
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我注意到,如果不更改活动A的启动模式,驻留在
活动A
顶部的其他活动仍将被清除,但不会调用onNewIntent
,因为活动将被销毁并重新创建。我使用此包装器将活动移动到前面:
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
protected static int moveToFront(Context ctx) {
int result = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // honeycomb
final ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
for (int i = 0; i < recentTasks.size(); i++)
{
O.Log.d(TAG, "Application executed : "
+recentTasks.get(i).baseActivity.toShortString()
+ "\t\t ID: "+recentTasks.get(i).id+"");
// bring to front
if (recentTasks.get(i).baseActivity.toShortString().indexOf(PACKAGE_NAME) > -1) {
activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
result = 1;
break;
}else{
result = 2;
}
}
}
return result;
}
@TargetApi(Build.VERSION\u CODES.HONEYCOMB)
受保护的静态int-moveToFront(上下文ctx){
int结果=0;
如果(Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.HONEYCOMB){//HONEYCOMB
最终ActivityManager ActivityManager=(ActivityManager)ctx.getSystemService(Context.ACTIVITY_服务);
最终列表recentTasks=activityManager.getRunningTasks(Integer.MAX_值);
对于(int i=0;i-1){
activityManager.moveTaskToFront(recentTasks.get(i).id,activityManager.MOVE_TASK_WITH_HOME);
结果=1;
打破
}否则{
结果=2;
}
}
}
返回结果;
}
结果值:
0-旧安卓版本
1-好的
2-故障只有一个问题:从另一个应用程序使用startActivityForResult调用A,因此如果我从B调用它,我可以更改从外部应用程序接收到的A的意图。您可以将传入的意图保存在活动状态,然后在
onNewIntent
上,您可以解析相同保存的意图,是的,这似乎是一个很好的策略,我甚至认为这是一种将浏览器和B放入新“任务”并让B关闭“任务”的方法,包括浏览器活动,但我不知道是否可能这也是可能的。但是B将如何关闭浏览器活动,因为它是在浏览器活动之后启动的?我在考虑类似FinishAfinity()的东西,但我不知道它是否有效