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

React Native如何自动检测用户设备所有SIM卡的手机号码?

React Native 双卡手机号码获取实现方案

注意:受系统隐私限制,iOS 全版本无公开API支持读取SIM卡手机号,以下方案仅适用于安卓端;安卓6.0(API 23)以下版本无官方双卡支持接口

可用方案:使用维护中的双卡信息读取库

你之前使用的react-native-sim-data已停止维护多年,不支持新版React Native、安卓12及以上系统;react-native-device-info的手机号读取接口本身仅返回默认卡槽号码,未做双卡适配,推荐替换为react-native-sim-cards-manager实现需求,接入步骤如下:

  • 安装依赖
    npm install react-native-sim-cards-manager
    # 或使用yarn
    yarn add react-native-sim-cards-manager
    
  • 配置安卓权限
    打开项目路径下android/app/src/main/AndroidManifest.xml文件,添加所需权限:
    <!-- 基础读手机状态权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 安卓12(API31)及以上需要额外加读手机号权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
    
  • 业务代码中动态申请权限并读取双卡信息
    import SimCardsManager from 'react-native-sim-cards-manager';
    import { PermissionsAndroid, Platform } from 'react-native';
    
    const fetchDualSimNumbers = async () => {
      if (Platform.OS !== 'android') return [];
    
      // 组装需要申请的权限列表
      const permissionList = [PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE];
      if (Platform.Version >= 31) {
        permissionList.push(PermissionsAndroid.PERMISSIONS.READ_PHONE_NUMBERS);
      }
    
      // 动态申请权限
      const permissionResult = await PermissionsAndroid.requestMultiple(permissionList);
      const isAllPermitted = Object.values(permissionResult).every(
        res => res === PermissionsAndroid.RESULTS.GRANTED
      );
      if (!isAllPermitted) return [];
    
      // 读取全部SIM卡信息
      try {
        const simList = await SimCardsManager.getSimCards();
        return simList.map(sim => ({
          slotIndex: sim.slotIndex, // 卡槽索引,0为卡1、1为卡2
          carrierName: sim.carrierName, // 所属运营商名称
          phoneNumber: sim.phoneNumber, // 对应手机号码
          countryIso: sim.countryIso, // SIM卡归属国家代码
        }));
      } catch (err) {
        console.error('读取SIM卡信息失败', err);
        return [];
      }
    };
    

注意事项

  • 存在读取不到号码的场景:部分运营商不会将用户手机号(MSISDN)写入SIM卡存储区,这种场景下接口返回的phoneNumber字段为空,属于运营商侧限制,无通用技术方案绕过,需要引导用户手动输入手机号。
  • 如果现成库无法满足定制需求,可以自行编写React Native原生模块封装安卓系统的SubscriptionManager类,调用getActiveSubscriptionInfoList()方法即可获取全部活跃SIM卡的信息,自行处理数据回传逻辑即可。

预期实现效果参考

双卡号码选择弹窗效果

内容的提问来源于stack exchange,提问作者Shail Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:31:14