5

搜索高低并没有为我的问题产生任何结果。因此,我终于发帖请求帮助。

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

但是,我找不到向 App A 返回响应的方法。使用 startActivityForResult() 总是给我立即 onActivityResult() 和 RESULT_CANCELED。经过进一步检查,logcat 给了我一个警告,指出“活动正在作为新任务启动,因此取消活动结果”。

我尝试使用不同的启动模式、动作过滤器(android.intent.action.PICK)制作 App B 的 Activity,但我所做的没有任何改变。

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

编辑:

好的,我尝试从活动 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>

有人真的让这个工作吗?我开始怀疑启动另一个应用程序的活动永远不会返回结果,因为无论您在“意图过滤器”中放入什么,它似乎总是会启动一个新任务。

4

3 回答 3

11

确保您正在启动的 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

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

如果 Activity 作为新任务的一部分启动,那么 Android 将立即使用 RESULT_CANCELED 调用 onActivityResult(),因为一个任务中的 Activity 不能将结果返回给另一个任务,只有同一任务中的 Activity 可以这样做。

于 2013-03-27T20:29:00.563 回答
2

遇到同样的问题,我查看了源代码,以及为什么要添加 NEW_TASK 标志。

事实证明,如果源活动 A 或目标活动 B 使用单实例启动模式,则会自动添加 NEW_TASK 标志:

    if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
        // The original activity who is starting us is running as a single
        // instance...  this new activity it is starting must go on its
        // own task.
        launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
    } else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE
            || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) {
        // The activity being started is a single instance...  it always
        // gets launched into its own task.
        launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
    }

当您拥有这两个应用程序时,您应该能够确保这些启动模式未在清单或意图中定义。

到目前为止,我找不到任何其他不情愿地设置 NEW_TASK 标志的实例。

于 2014-05-13T08:23:08.893 回答
0

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

Intent intent = new Intent();
setResult(Activity.RESULT_OK, intent);
finish();

或者可以,

setResult(Activity.RESULT_OK);
finish();

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

否则它将始终以结果代码结束Activity.RESULT_CANCELED

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

希望这可以帮助。

于 2012-08-12T05:13:26.670 回答