我正在使用调用startActivityForResult(intent, ACTIVITY_TYPE)
从我的应用中的主要活动启动活动,但它们都在工作但只有一个。
这个在调用时会根据需要启动活动,但在日志中我可以看到onActivityResult()
被立即触发。该活动会显示,但RESULT_CANCELED
会立即返回onActivityResult()
。
然后我与活动进行互动,按下调用finish()
的按钮,此时未调用onActivityResult()
(因为显然已经返回了结果)。
这对任何人都有意义吗?有没有人见过这种行为?
答案 0 :(得分:304)
如果您的活动是以startActivityForResult()
或singleInstance
推出的,则无法使用singleTask
。 standard
或singleTop
启动模式将解决问题。
答案 1 :(得分:93)
答案 2 :(得分:21)
之前我已经看过这种行为,请确保AndroidManifest文件中的destnation活动(特殊活动)不是singleInstance
。如果活动为singleInstance
,则会在启动之前返回RESULT_CANCELED
!
答案 3 :(得分:17)
我还想补充一点,您可以通过以下方式拨打外部应用:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
哪个会在默认情况下添加Intent.FLAG_ACTIVITY_NEW_TASK
创建一个意图,因此请致电:
in.setFlags(0);
哪个将清除该标志,然后您可以继续:startActivityForResult(in, action);
我这样做的原因是我有一个实用程序应用程序,它在其他几个应用程序之间具有通用功能,我可以将代码更改保存到一个位置,而不是担心多个更新。
答案 4 :(得分:5)
如果你的意图中有FLAG_ACTIVITY_NEW_TASK
,它也会触发。
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, REQUEST_CODE);
答案 5 :(得分:4)
startActivityForResult()
不适用于Android前棒棒糖版本中的singleInstance
或singleTask
活动。从Android 5开始,它可以运行(有关详细信息,请参阅this answer)。
答案 6 :(得分:1)
我的问题在于调用活动。它在AndroidManifest中的声明具有以下属性:
android:noHistory="true"
将其更改为" false"现在工作正常。
答案 7 :(得分:1)
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-called-instantly/1004072
答案 8 :(得分:1)
还要检查清单中的活动是否为android:noHistory =“ true”,如果是,它将不起作用。
答案 9 :(得分:0)
对于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
答案 10 :(得分:0)
onActivityResult()
也会将RESULT_CANCELED
作为resultCode
传递。
答案 11 :(得分:0)
在Android Manifest中为android:launchMode="singleTop"
设置您想要打开结果的活动,同时打开活动设置标记intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
答案 12 :(得分:0)
如果您在AndroidManifest.xml的活动中定义了android:noHistory="true"
,则会在此处引起相同的问题。