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