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

Android API 31及以上版本跨App启动失败问题求助

Android 12/13(API31+)跨应用启动Activity适配方案

问题根源与修复步骤

1. 修正调用端Intent代码

你的Intent同时混合了显式启动(指定ComponentName)和隐式启动参数(ACTION_SEND、CATEGORY、setType),这会导致Intent与目标Activity的Manifest声明不匹配,直接触发ActivityNotFoundException。

简化Intent,移除多余的隐式参数:

Intent intent = new Intent();
// 仅保留显式组件指定
intent.setComponent(new ComponentName("com.company.Appname", "com.company.Appname.presentation.ui.activities.LoginActivity"));
intent.putExtra(Intent.EXTRA_TEXT, ssoDetails);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
    startActivity(intent);
} catch (Exception e) {
    e.printStackTrace();
    intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("playstore url"));
    try {
        startActivity(intent);
    } catch (Exception e1) {
        e1.printStackTrace();
    }
}

2. 确认目标应用的Manifest配置

目标应用的LoginActivity必须满足两个核心条件:

  • Activity的全类名与你代码中ComponentName的路径完全一致(注意包名、类名大小写,避免混淆导致类名变更)
  • 显式设置android:exported="true"(Android 12+中,无intent-filter的Activity默认exported为false,显式启动必须开启该属性)

目标应用Manifest示例配置:

<activity
    android:name="com.company.Appname.presentation.ui.activities.LoginActivity"
    android:exported="true">
    <!-- 若该Activity有intent-filter可保留,但显式启动不受其影响 -->
</activity>

3. 调用端Manifest的包名声明(Android 11+要求)

即使你尝试过<queries>配置,再次确认调用端Manifest中已正确声明目标应用包名:

<manifest ...>
    <queries>
        <!-- 声明要启动的目标应用包名 -->
        <package android:name="com.company.Appname" />
    </queries>
    
    <!-- 其他原有配置 -->
</manifest>

额外排查点

  • 确认测试设备上已安装目标应用,且包名、Activity类名无拼写错误
  • 若目标应用为Android 12+版本,检查是否开启了应用隐私限制(禁止其他应用启动该Activity)
  • 临时移除异常捕获逻辑,直接启动Intent,查看更详细的系统错误日志

内容的提问来源于stack exchange,提问作者A.R.Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:27:03