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

Android API获取eSIM卡所有配置文件:getUiccCardsInfo方法不存在

获取eSIM配置文件的正确实现方式

你的代码里getUiccCardsInfo()方法不存在,是因为该方法属于旧版API或已被替代,以下是适配Android系统的正确实现方案:

1. 配置必要权限

首先在AndroidManifest.xml中添加权限声明:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 部分运营商要求 -->
<uses-permission android:name="android.permission.MANAGE_ICC_PROFILES" />

注意:MANAGE_ICC_PROFILES是系统级权限,普通应用无法直接申请,可通过跳转系统设置让用户授权,或在系统签名环境下运行。

2. 适配API的代码实现

针对Android 10(API 29)及以上版本,使用getEuiccProfiles()替代原方法获取eSIM配置文件:

public void listESIMProfiles(Promise promise) {
    try {
        EuiccManager euiccManager = (EuiccManager) getReactApplicationContext().getSystemService(Context.EUICC_SERVICE);
        
        // 先检查设备是否支持eSIM
        if (!euiccManager.isEnabled()) {
            promise.reject("NOT_SUPPORTED", "设备不支持eSIM功能");
            return;
        }

        // 获取所有eSIM配置文件
        List<EuiccProfileInfo> profileInfos = euiccManager.getEuiccProfiles();
        List<String> profiles = new ArrayList<>();
        
        for (EuiccProfileInfo profileInfo : profileInfos) {
            // 提取配置文件关键信息:ICCID、EID、状态
            profiles.add(String.format("ICCID: %s, EID: %s, 状态: %s",
                    profileInfo.getIccid(),
                    euiccManager.getEid(),
                    getProfileState(profileInfo.getState())));
        }
        
        promise.resolve(profiles);
    } catch (SecurityException e) {
        promise.reject("PERMISSION_DENIED", "缺少必要权限,请检查配置或引导用户授权");
    } catch (Exception e) {
        promise.reject("ERROR", e.getMessage());
    }
}

// 转换配置文件状态为可读文本
private String getProfileState(int state) {
    switch (state) {
        case EuiccProfileInfo.STATE_ENABLED:
            return "已启用";
        case EuiccProfileInfo.STATE_DISABLED:
            return "已禁用";
        case EuiccProfileInfo.STATE_UNKNOWN:
            return "未知状态";
        default:
            return "状态码: " + state;
    }
}

3. 低版本兼容方案(Android 9及以下)

如果需要兼容旧版本系统,可通过UiccManager获取卡片信息:

// Android 9及以下版本兼容示例
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    UiccManager uiccManager = (UiccManager) getReactApplicationContext().getSystemService(Context.UICC_SERVICE);
    List<UiccCardInfo> cardInfos = uiccManager.getUiccCardsInfo();
    for (UiccCardInfo cardInfo : cardInfos) {
        EuiccInfo euiccInfo = cardInfo.getEuiccInfo();
        if (euiccInfo != null) {
            // 处理eSIM信息
        }
    }
}

关键注意事项

  • 引导用户授权:普通应用无法直接获取MANAGE_ICC_PROFILES权限,可通过以下代码跳转系统设置授权:
Intent intent = new Intent(EuiccManager.ACTION_MANAGE_ICC_PROFILES);
startActivity(intent);
  • 位置权限:部分运营商要求开启位置权限才能正常读取eSIM信息,需提前申请。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:16:24