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
相关产品推荐
相关产品推荐

