2017-01-24 5 views
0

5.1にAndroidに追加されたMulti SIM supportを使用するコードをいくつか更新しています。私たちのアプリでは、SIMオペレータ(またはMCC + MNCコンボ)を多く調べているので、私が書いているコードでは、TelephonyManager.getSimOperator()への依存からSubscriptionManagerからのSubscriptionInfosへの移行に関連しています。 SIMのMCCとMNC。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のためにint型を返すているため、あなたは多国籍企業の一部である先行ゼロを失うことを発見しています。いくつかの例を見るには、テーブルhereをチェックしてください。 MCC + MNCを連結すると、SIMオペレータが表示されるため、しばしば存在する0を維持することが重要です。たとえば、メキシコのNEXTELではSIM演算子の値が「334090」ですが、SubscriptionInfoからMCCとMNCのintが返されるため、値はそれぞれ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バージョンで扱うことを別の方法で気にする必要はありません。

関連する問題