我已经得到以下呼叫流程:
外部应用 - >我的活动A - >打开浏览器 - >我的活动B
从外部应用程序,通过startActivityForResult
可以开始我的活动A.活动A可以打开浏览器查看网站,从网站上,用户可以点击链接并打开活动B的链接。现在我想关闭B然后回到A.我该怎么办?如果我在B上拨打finish()
,我会看到浏览器。
答案 0 :(得分:2)
您可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP
意图标记从活动B再次启动活动A.在此之前,您还需要更改清单中活动A的launch mode
,使其成为standard
以外的其他内容
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我注意到,如果您不更改活动A的启动模式,则仍会清除位于activity A
顶部的其他活动,但不会调用onNewIntent
,因为活动将是摧毁并重新创造。
答案 1 :(得分:1)
我正在使用这个包装器将一个Activity移到前面:
@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;
}
结果值:
0 - 旧的Android版本 1 - 好的 2 - 错误