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

Android 14(API 34)启动Activity报错:No Activity found to handle Intent

Android 14下Activity-for-Result启动失败(ActivityNotFoundException)的解决办法

问题根源

Android 14对隐式Intent的解析规则做了收紧,你的代码中使用仅包含action的隐式Intent启动应用内Activity,在Android 13及以下系统中可能因系统检查宽松可正常匹配,但Android 14下必须满足更严格的匹配条件才会被识别。

解决方案

方案1:改用显式Intent(推荐)

应用内启动Activity最可靠的方式是使用显式Intent,直接指定目标Activity的类,完全避免隐式Intent的兼容性问题。修改代码如下:

// 替换TargetActivity为你实际要启动的Activity类
myNewActivity.launch(new Intent(myActivity, TargetActivity.class));

方案2:修复隐式Intent配置(若必须使用隐式Intent)

如果坚持使用隐式Intent,需完成两项配置:

  1. 给目标Activity的intent-filter添加DEFAULT category
    在AndroidManifest.xml中,确保目标Activity的包含android.intent.category.DEFAULT,因为隐式Intent启动Activity必须匹配该category:
    <activity
        android:name=".TargetActivity"
        android:exported="false"> <!-- 应用内启动无需设为true -->
        <intent-filter>
            <action android:name="app.my.application.MyActivity"/>
            <!-- 添加这一行 -->
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>
    
  2. 给Intent添加包名限定
    若启动的Intent仅指定action,Android 14可能搜索所有可见应用的Activity,添加包名限定可确保只在当前应用内查找:
    Intent intent = new Intent("app.my.application.MyActivity");
    // 限定只在当前应用内查找Activity
    intent.setPackage(myActivity.getPackageName());
    myNewActivity.launch(intent);
    

补充说明

Android 14对隐式Intent的限制主要是为提升系统安全性,避免Intent被其他应用劫持。对于应用内页面跳转,显式Intent始终是最优选择,不仅兼容性更好,还能规避潜在安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:20:14