You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨App调用带返回结果的Activity时Manifest文件该如何配置?

调用方(第一个应用)Manifest修改

如果你的应用targetSdkVersion ≥ 30(适配Android 11及以上系统),需要在<manifest>根节点(与<application>节点同级)添加包可见性声明,否则无法正常获取到第二个应用的启动Intent:

<manifest ...>
    <!-- 新增如下queries节点 -->
    <queries>
        <package android:name="a1.a1.gerufen3" />
    </queries>

    <application ...>
        ...
    </application>
</manifest>

如果targetSdkVersion < 30,调用方Manifest无需额外修改。


被调用方(第二个应用,包名a1.a1.gerufen3)Manifest修改

你需要确保被调用的目标Activity满足以下配置:

  • 目标Activity的android:exported属性显式设置为true,允许外部应用启动该组件。如果应用targetSdkVersion ≥ 31,该属性必须显式声明,不能省略。
  • 如果你是通过自定义action隐式启动目标Activity而非直接用包名启动,还需要为目标Activity添加匹配的<intent-filter>配置。

如果你调用的是第二个应用的启动页Activity,默认的启动页配置已经包含LAUNCHER类别的intent-filter,仅需确保android:exported="true"即可,示例配置:

<activity
    android:name=".YourTargetActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

额外注意事项(非Manifest配置,但会直接影响结果返回)

通过getLaunchIntentForPackage()获取的Intent默认会携带FLAG_ACTIVITY_NEW_TASK标记,该标记下启动的Activity无法返回结果给调用方,你需要手动移除该标记:

val pack = "a1.a1.gerufen3"
val unter = packageManager.getLaunchIntentForPackage(pack)!!
unter.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // 新增该行代码
secondActivityWithResult.launch(unter)

同时被调用方的目标Activity需要在关闭前调用setResult(RESULT_OK, intent)设置返回数据,否则调用方收到的结果码会默认是RESULT_CANCELED。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:24:06