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
相关产品推荐
相关产品推荐

