使用androidx.activity.result启动第三方应用立即返回RESULT_CANCELED
问题根源
你遇到的即时返回RESULT_CANCELED的核心原因是getLaunchIntentForPackage()返回的Intent默认携带了FLAG_ACTIVITY_NEW_TASK标记:
当你使用带这个标记的Intent启动Activity时,目标Activity会运行在完全独立的新任务栈中,和调用方应用不属于同一个任务栈,系统默认不会给调用方回传任何结果,会在启动目标应用的同时立刻回调RESULT_CANCELED。
解决方法
1. 移除Intent中的NEW_TASK标记
修改你的getMyapplicationIntent()方法,拿到Intent后清除对应的标记:
private fun getMyapplicationIntent(): Intent? { val intent = packageManager.getLaunchIntentForPackage("com.example.myapplication") // 移除默认添加的NEW_TASK标记 intent?.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK) return intent }
2. 检查目标应用的配置
你还需要确认目标应用侧的配置符合返回结果的要求:
- 目标入口Activity的
launchMode必须为默认的standard,如果配置为singleTask/singleInstance/singleInstancePerTask这类单实例模式,依然会触发即时返回RESULT_CANCELED的问题 - 目标Activity在关闭前必须显式调用
setResult(Activity.RESULT_OK, 你要回传的Intent),再调用finish(),如果用户直接点击返回键关闭,系统默认会返回RESULT_CANCELED,属于正常逻辑。
内容的提问来源于stack exchange,提问作者botzek13
相关产品推荐
相关产品推荐

