Android – startActivityForResult立即触发onActivityResult
我正在使用调用startActivityForResult(intent, ACTIVITY_TYPE)
在我的应用程序的主要活动中启动活动,并且它们都在工作,但只有一个。
这个被调用时会根据需要启动活动,但是在日志中我可以看到onActivityResult()
立即被触发。 活动显示,但RESULT_CANCELED
立即返回到onActivityResult()
。
然后,我与activity进行交互,按下一个调用finish()
的button, onActivityResult()
不会被调用(因为显然结果已经被返回)。
这对任何人都有意义吗? 有没有人见过这种行为?
如果您的活动作为singleInstance
或singleTask
启动,则不能使用startActivityForResult()
。 standard
或singleTop
启动模式将解决这个问题。
另外确保意图没有设置Intent.FLAG_ACTIVITY_NEW_TASK
。
我之前已经看到过这种行为,请确保您的destnation活动(即特殊活动)不是在AndroidManifest文件中的singleInstance
。 如果Activity是singleInstance
,那么它将在启动之前返回RESULT_CANCELED
!
我还想补充说,你可以调用一个外部的应用程序:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
这将创build一个Intent.FLAG_ACTIVITY_NEW_TASK
默认添加意图,所以调用:
in.setFlags(0);
这将清除该标志,然后您可以继续: startActivityForResult(in, action);
我这样做的原因是我有一个实用程序的应用程序之间的几个其他应用程序之间的共同function,我可以保持代码更改为一个位置,而不必担心多个更新。
我的问题是与调用活动。 它在AndroidManifest中的声明具有以下属性:
android:noHistory="true"
改为“假”,现在工作正常。
在棒棒糖Android版本中, startActivityForResult()
不适用于singleInstance
或singleTask
活动。 由于Android 5的作品(更多细节见这个答案 )。
对于ActivityGroup
或xxxActivity
等,也许xxxActivity
是subActivity
项的子活动。 然后startActivityForResult
不能工作,但父母可以得到结果。
-
从你的子活动调用
getParent().startActivityForResult()
-
你的父母(
ActivityGroup
)将能够处理onActivityResult
。 所以我创build了一个ActivityGroup
的子类并处理了onActivityResult
。 -
如果需要,您可以将结果重新路由回子活动。 只需通过
getLocalActivityManager().getCurrentActivity()
获取当前活动。 我的子活动inheritance自定义活动,所以我在该子类中添加了一个handleActivityResult(requestCode, resultCode, data)
来供ActivityGroup
调用。
例如: http : //www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
如果在manifest文件中拼错包或类名, onActivityResult()
也会传递RESULT_CANCELED
作为resultCode
。
在Android Manifest中设置android:launchMode="singleTop"
为你想要打开的活动,同时打开活动设置标志intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
如果您的意图有FLAG_ACTIVITY_NEW_TASK
,也会触发。
Intent intent = new Intent(this, MyActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, REQUEST_CODE);