Answers:
startActivityForResult()如果您的活动是以singleInstance或发起的,则无法使用singleTask。standard或singleTop启动模式将解决此问题。
singleTop对我来说似乎很好,singleTask但是引起了这个问题,因此singleInstance也肯定会这样做
Intent.FLAG_ACTIVITY_NEW_TASK吗?
我还想补充一点,您可以使用以下命令调用外部应用程序:默认情况下,该应用程序Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
会创建一个具有Intent.FLAG_ACTIVITY_NEW_TASK添加意图的应用程序,因此调用:in.setFlags(0);
它将清除该标志,然后您可以继续执行以下操作:startActivityForResult(in, action);
我这样做的原因是,我有一个实用程序应用程序,该实用程序应用程序在其他几个应用程序之间具有共同的功能,因此我可以将代码更改保留在一个位置,而不必担心多个更新。
如果FLAG_ACTIVITY_NEW_TASK您有意图,它也会触发。
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, REQUEST_CODE);
Android 4.4有一个小问题,等待在结束活动结束时返回,要解决此问题,重要的是设置:
TaskAffinity = "[SAME STRING]")launchmode=singleTop, launchIntent.SetFlags(0); // for reset default Intent flags if you launch from package manager此解决方案适用于所有版本的Android
参见TaskAffinity:https://asyoulook.com/computers%20&%20internet/android-onactivityresult-being-call-instantly/1004072
对于ActivityGroup或TabHost其他,也许xxxActivity是subActivity其父级的。这时startActivityForResult不能工作,但父母可以得到结果。
getParent().startActivityForResult()从您的子活动中致电
您的父母ActivityGroup将能够处理onActivityResult。因此,我创建了的子类ActivityGroup并对其进行处理onActivityResult。
您可以根据需要将结果重新路由回子活动。只需通过获取当前活动即可getLocalActivityManager().getCurrentActivity()。我的子活动继承自自定义活动,因此我handleActivityResult(requestCode, resultCode, data)在该子类中添加了一个ActivityGroup要调用的子活动。
示例:http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html