2014-03-04 43 views
0

我正在開發一款應用程序,其中需要用戶的SIM卡的詳細信息 他的電話號碼,imei號碼和運營商。到目前爲止,我已經實現了他的IMEI號碼this answer,是他的設備單卡或雙卡。 如何獲取他的SIM卡號和兩個連接的運營商名稱。獲取雙卡android手機的運營商詳細信息

回答

0

試試這個,對我的作品:

TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
String carrierName = manager.getNetworkOperatorName(); 
+1

你確定它可以用於雙SIM卡手機嗎? – onkar

+0

Android SDK不支持多個SIM卡。只有我們可以獲得當前網絡運營商或SIM運營商的名稱,並且如果您沒有SIM卡,結果將是「」。這將工作,但只對主要運營商。 –

+3

從API 22開始,現在您可以檢查多張SIM卡。查看[Android文檔](https://developer.android.com/reference/android/telephony/SubscriptionManager.html#getActiveSubscriptionInfoList%28%29) –

0

試一下:

private List<String> getNetworkOperator(final Context context) { 
    // Get System TELEPHONY service reference 
    List<String> carrierNames = new ArrayList<>(); 
    try { 
     final String permission = Manifest.permission.READ_PHONE_STATE; 
     if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) && (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED)){ 
      final List<SubscriptionInfo> subscriptionInfos = SubscriptionManager.from(context).getActiveSubscriptionInfoList(); 
      for (int i = 0; i < subscriptionInfos.size(); i++) { 
       carrierNames.add(subscriptionInfos.get(i).getCarrierName().toString()); 
      } 

     } else { 
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      // Get carrier name (Network Operator Name) 
      carrierNames.add(telephonyManager.getNetworkOperatorName()); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return carrierNames; 
} 
1

幸運的是有幾個本地的解決方案。希望這會有助於某人。

對於API> = 17:

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 

// Get information about all radio modules on device board 
// and check what you need by calling #getCellIdentity. 

final List<CellInfo> allCellInfo = manager.getAllCellInfo(); 
for (CellInfo cellInfo : allCellInfo) { 
    if (cellInfo instanceof CellInfoGsm) { 
     CellIdentityGsm cellIdentity = ((CellInfoGsm) cellInfo).getCellIdentity(); 
     //TODO Use cellIdentity to check MCC/MNC code, for instance. 
    } else if (cellInfo instanceof CellInfoWcdma) { 
     CellIdentityWcdma cellIdentity = ((CellInfoWcdma) cellInfo).getCellIdentity(); 
    } else if (cellInfo instanceof CellInfoLte) { 
     CellIdentityLte cellIdentity = ((CellInfoLte) cellInfo).getCellIdentity(); 
    } else if (cellInfo instanceof CellInfoCdma) { 
     CellIdentityCdma cellIdentity = ((CellInfoCdma) cellInfo).getCellIdentity(); 
    } 
} 

在AndroidManifest添加權限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
</manifest> 

爲了讓網絡運營商可以檢查MCC和MNC碼:

對於API> = 22:

final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); 
for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) { 
    final CharSequence carrierName = subscriptionInfo.getCarrierName(); 
    final CharSequence displayName = subscriptionInfo.getDisplayName(); 
    final int mcc = subscriptionInfo.getMcc(); 
    final int mnc = subscriptionInfo.getMnc(); 
    final String subscriptionInfoNumber = subscriptionInfo.getNumber(); 
} 

對於API> = 23。要檢查手機是雙卡/三卡/多卡:

TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
if (manager.getPhoneCount() == 2) { 
    // Dual sim 
}