Android 13使用Intent.ACTION_CALL导致双卡被禁用的问题求助
解决Android 13中使用Intent.ACTION_CALL触发双卡禁用的问题
1. 适配Android 13的权限要求
Android 13对通话相关权限的校验更严格,同时新增了POST_NOTIFICATIONS权限,缺失该权限可能导致系统对通话Intent的处理异常。首先确保Manifest中声明必要权限:
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
并在运行时动态申请这三个权限,尤其是POST_NOTIFICATIONS和READ_PHONE_STATE,避免权限不足引发的系统异常。
2. 显式指定SIM卡发起通话
Android 13在双卡场景下,未指定SIM卡的通话Intent可能触发系统逻辑错误。通过添加额外参数指定目标SIM卡ID:
Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + targetPhoneNumber)); // 获取活跃SIM卡列表并指定其中一张 SubscriptionManager subscriptionManager = getSystemService(SubscriptionManager.class); List<SubscriptionInfo> activeSubscriptions = subscriptionManager.getActiveSubscriptionInfoList(); if (activeSubscriptions != null && !activeSubscriptions.isEmpty()) { // 可根据业务需求选择对应SIM卡,此处示例选第一张 int targetSimId = activeSubscriptions.get(0).getSubscriptionId(); callIntent.putExtra("android.telecom.extra.SUBSCRIPTION", targetSimId); } startActivity(callIntent);
3. 临时替代方案:使用ACTION_DIAL
如果上述方法仍未解决问题,可以暂时用Intent.ACTION_DIAL替代ACTION_CALL,该Intent仅打开拨号界面,不会直接发起通话,能规避双卡禁用的异常:
Intent dialIntent = new Intent(Intent.ACTION_DIAL); dialIntent.setData(Uri.parse("tel:" + targetPhoneNumber)); startActivity(dialIntent);
4. 排查厂商ROM兼容性问题
部分品牌的Android 13定制ROM对双卡通话逻辑做了特殊修改,可能存在适配Bug:
- 将设备系统升级到最新版本,修复厂商已知的兼容性问题
- 尝试在开发者选项中关闭与双卡相关的优化开关(如部分厂商的"双卡智能切换"功能)
5. 恢复系统通话服务
若仅个别设备出现问题,可能是系统通话服务异常:
- 清除系统电话应用的缓存和数据
- 重启设备,重置系统服务状态
内容的提问来源于stack exchange,提问作者Paridel Makouala
相关产品推荐
相关产品推荐

