【发布时间】:2018-03-23 08:57:55
【问题描述】:
我正在更新一些代码以使用在 5.1 中添加到 Android 的Multi SIM support。我们在我们的应用程序中检查了 SIM 运营商(或 MCC+MNC 组合)很多,所以我正在编写的代码涉及从依赖 TelephonyManager.getSimOperator() 迁移到从 SubscriptionManager 获取 SubscriptionInfos,每个都可以访问用于 SIM 卡的 MCC 和 MNC。
//old way – can only access one SIM
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String simOperator = telephonyManager.getSimOperator();
//new way - gives access to all SIMs
SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subInfoList = subscriptionManager.getActiveSubscriptionInfoList();
for(SubscriptionInfo info : subInfoList) {
int mcc = info.getMcc();
int mnc = info.getMnc();
//do some stuff...
}
我发现因为它为 MCC 和 MNC 返回整数,所以您会丢失某些 MNC 中的前导零。要查看一些示例,请查看表 here。当您连接 MCC+MNC 时,您将获得 SIM 运营商,因此保留经常出现的零很重要。例如,墨西哥的 NEXTEL 的 SIM 运营商值为“334090”,但由于 SubscriptionInfo 返回 MCC 和 MNC 的整数,因此您将分别获得值 334 和 90。
鉴于此问题,您如何可靠地将 SubscriptionInfo 的 MCC+MNC 对链接到已知 SIM 运营商列表中的特定 SIM 运营商?这是对这个 API 设计的疏忽吗?有没有其他方法可以为多卡手机中的每张 SIM 卡获取 SIM 运营商?
【问题讨论】:
标签: android