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

Android双卡(实体SIM+eSIM)如何同时获取CellInfo与信号强度

如何获取双卡(实体SIM+eSIM)的CellInfo与信号强度

默认的TelephonyManager实例仅会返回主SIM卡的数据,要同时获取主副卡的CellInfo与信号强度,核心思路是针对每个激活的SIM订阅创建专属的TelephonyManager实例,结合你已用到的SubscriptionManager.getActiveSubscriptionInfoList()接口,具体实现步骤如下:

  • 第一步:申请必要权限
    在AndroidManifest.xml中声明权限,Android 6.0及以上需动态申请危险权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 获取CellInfo必须权限 -->
    
  • 第二步:获取所有激活的SIM订阅信息
    利用你已调研到的接口拿到双卡的基础信息:

    SubscriptionManager subscriptionManager = getSystemService(SubscriptionManager.class);
    List<SubscriptionInfo> activeSubscriptions = subscriptionManager.getActiveSubscriptionInfoList();
    
  • 第三步:遍历订阅,获取对应SIM的CellInfo与信号强度
    对每个SubscriptionInfo,通过createForSubscriptionId()创建专属TelephonyManager,再调用接口获取目标数据:

    if (activeSubscriptions != null) {
        for (SubscriptionInfo info : activeSubscriptions) {
            int subId = info.getSubscriptionId();
            // 创建对应SIM卡的TelephonyManager实例
            TelephonyManager simTelephonyManager = getSystemService(TelephonyManager.class)
                    .createForSubscriptionId(subId);
            
            // 获取当前SIM的CellInfo列表
            List<CellInfo> cellInfos = simTelephonyManager.getAllCellInfo();
            // 获取当前SIM的信号强度(API 29+建议用getSignalStrengths()适配5G等新类型)
            SignalStrength signalStrength = simTelephonyManager.getSignalStrength();
            
            // 结合info中的MCC/MNC、运营商名称等标识,区分处理主副卡数据
        }
    }
    
  • 关键注意点:

    • API版本兼容:createForSubscriptionId()从API 22开始可用;API 29及以上推荐使用getSignalStrengths()替代getSignalStrength(),以支持多频段信号数据
    • 厂商适配:部分设备厂商对双卡数据获取有额外限制,需在目标机型上验证兼容性
    • 权限校验:动态申请权限后,需确认权限已授予再执行数据获取逻辑

内容的提问来源于stack exchange,提问作者Akshay Chougule

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:20:30