2017-01-24 42 views
0

我正在更新一些代碼以使用在5.1中添加到Android的Multi SIM support。我們在應用程序中檢查了SIM運營商(或MCC + MNC組合),因此我正在編寫的代碼涉及從依賴TelephonyManager.getSimOperator()從SubscriptionManager中獲取SubscriptionInfos,其中每個都可以訪問MCC和MNC的SIM卡。SubscriptionInfo.getMnc()丟棄前導零,無法將MCC + MNC鏈接到SIM運營商

//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整數,你失去了領先的零點,在一些跨國公司。要查看一些示例,請查看錶here。當您連接MCC + MNC時,您將獲得SIM卡操作員,因此保留經常出現的零點很重要。例如,墨西哥的NEXTEL的SIM運算符值爲「334090」,但因爲SubscriptionInfo返回MCC和MNC的整數,所以分別得到值334和90。

鑑於此問題,如何將SubscriptionInfo的MCC + MNC對可靠地鏈接到已知SIM運營商列表中的特定SIM運營商?這是這個API的設計中的一個疏忽嗎?是否有其他方法可以爲多SIM手機中的每張SIM卡獲取SIM卡操作員?

回答

0

MCC總是3位數,其餘的是MNC,正如您所說的,可能有2或3位數字。

如果將int解析爲String,則只需獲取它的子字符串並根據需要處理信息。

而且它是一個隱藏的方法,但是你可以通過反射訪問它,讓你在字符串格式想要的信息,這至少存在從Android 6Android 7

public String getSimOperator(int subId) 

但我認爲SubscriptionManager方式是安全的因爲它是開放的API,目前你不需要打擾Android版本處理它的不同。