Как получить имя оператора из двух сим-телефона Android?

1

Я могу получить имя оператора на телефоне SIM-телефонии.

Я использовал следующий код, но он работает только с одним SIM-телефоном.

TelephonyManager telephonyManager = ((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE));
Теги:

3 ответа

4

К счастью, есть несколько собственных решений, которые я нашел при поиске способа получить оператора сети.

Для 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. Чтобы просто проверить, есть ли телефон двойной/тройной/много sim:

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

Используя "SubscriptionManager", мы можем знать имена Carrier двойного sim мобильного телефона Android.

SubscriptionManager subscriptionManager=(SubscriptionManager)getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

            List<SubscriptionInfo> subscriptionInfoList=subscriptionManager.getActiveSubscriptionInfoList();

            if(subscriptionInfoList!=null && subscriptionInfoList.size()>0){
               for(SubscriptionInfo info:subscriptionInfoList){
                  String carrierName = info.getCarrierName().toString();
                   String mobileNo=info.getNumber();
                   String countyIso=info.getCountryIso();
                   int dataRoaming=info.getDataRoaming();

               }

            }
  • 0
    В чем разница между getcarriername () и getdisplayname (). Я получаю No Service в качестве имени перевозчика, когда включен режим полета и getDisplayname как Airtel. Я хочу спросить, какой использовать, чтобы показать пользователю имя оператора SIM.
0

Так как андроид не поддерживает несколько sim по меньшей мере ниже уровня API 22.

С API 22 вы можете проверить наличие нескольких SIM-карт, используя метод SubscriptionManager getActiveSubscriptionInfoList(). Подробнее о https://developer.android.com/reference/android/telephony/SubscriptionManager.html#getActiveSubscriptionInfoList%28%29.

Подробнее см. ниже ссылку Определите статус двух SIM-карт в телефоне с двумя SIM-картами

  • 0
    В чем разница между getcarriername () и getdisplayname (). Я получаю No Service в качестве имени перевозчика, когда включен режим полета и getDisplayname как Airtel. Я хочу спросить, какой использовать, чтобы показать пользователю имя оператора SIM.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню