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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:00:56