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

Android 11及以上版本Java中Calling Intent失效问题咨询

解决Android 11+无法调用拨号Intent的问题

问题原因

Android 11(API 30)及以上版本引入了软件包可见性限制,默认情况下应用无法发现其他应用的组件,导致代码中intent.resolveActivity(getPackageManager())返回null,拨号Intent无法启动。另外原代码存在语法错误:Uri.parse的括号未闭合,也会引发运行异常。

解决方案

1. 在AndroidManifest.xml中添加包可见性声明

在<manifest>标签内添加<queries>标签,声明需要访问拨号应用的权限:

<manifest ...>
    <queries>
        <!-- 允许查询支持拨号的应用 -->
        <intent>
            <action android:name="android.intent.action.DIAL" />
            <data android:scheme="tel" />
        </intent>
    </queries>

    <!-- 原有Manifest内容 -->
</manifest>

2. 修正代码中的语法错误

原代码中Uri.parse的括号未闭合,修正后的完整代码如下:

Intent intent = new Intent(Intent.ACTION_DIAL);
// Demo number
intent.setData(Uri.parse("tel:" + "0000000000"));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

补充说明

  • ACTION_DIAL仅负责打开拨号界面,不需要申请CALL_PHONE权限,权限层面无额外要求。
  • 如果需要直接发起通话而非打开拨号界面,才需要申请android.permission.CALL_PHONE权限,且在Android 6.0+版本中需动态申请。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:20:39