如何让外部Activity上的startActivityForResult工作?

Lf3*_*n4D 5 android start-activity

搜索高和低对我的问题没有任何结果.因此,我终于发帖请求一些帮助.

我有两个应用程序,都是我写的.App A启动App B,通过Intent.putExtra()传入参数.当App B启动时,这完全正常,参数传递得很好.

但是,我找不到一种方法来返回对App A的响应.使用startActivityForResult()总是立即给我带有RESULT_CANCELED的onActivityResult().经过进一步检查,logcat给了我一个警告,说明"活动正在作为一项新任务启动,因此取消了活动结果".

我尝试使用不同的启动模式,动作过滤器(android.intent.action.PICK)制作应用程序B的活动,但我没有改变任何东西.

我想做不可能的事吗?根据我的理解,我试图做的应该类似于使用第三方活动从设备的照片库中挑选图片.

编辑:

好吧,我尝试从活动B中删除LAUNCHER类别,但它仍然无法正常工作.这是我的活动:

<activity android:name=".${CLASSNAME}" android:label="@string/app_name" android:configChanges="mcc|mnc|locale|keyboardHidden|orientation" android:launchMode="standard">
    <intent-filter>
        <action android:name="android.intent.action.PICK" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

有人真的有这个工作吗?我开始怀疑启动另一个应用程序的活动永远不会返回结果,因为无论你在"intent-filter"中放置什么,它似乎总是会启动一项新任务.

Nic*_*mer 9

确保你正在启动的Activity没有在清单中设置android:launchMode并检查android:taskAffinity没有被使用.看这里:

http://developer.android.com/guide/topics/manifest/activity-element.html#aff

确保您用于启动活动的Intent没有设置FLAG_ACTIVITY_NEW_TASK.看这里:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

特别要注意:"当调用者从正在启动的活动请求结果时,不能使用此标志."

如果活动是作为新任务的一部分启动的,那么Android将立即使用RESULT_CANCELED调用onActivityResult(),因为一个任务中的活动无法将结果返回给另一个任务,只有同一任务中的活动才能执行此操作.


cod*_*aff 0

在你的活动 B 中,你应该有这样的东西,

Intent intent = new Intent();
setResult(Activity.RESULT_OK, intent);
finish();
Run Code Online (Sandbox Code Playgroud)

或者可以是,

setResult(Activity.RESULT_OK);
finish();
Run Code Online (Sandbox Code Playgroud)

您不需要将任何数据传递给活动 A。

否则它总是以结果代码结束Activity.RESULT_CANCELED

如果子活动因任何原因(例如崩溃)失败,父活动将收到代码为 RESULT_CANCELED 的结果。

希望这可以帮助。