Программно получить номер IMEI для двойной SIM-карты в android

Для одной SIM-карты работает следующий код:

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei= tm.getDeviceId();

Для двойной SIM я попробовал код по следующей ссылке:

Android: проверьте, является ли телефон двойной SIM-картой

Но это не помогло мне.

Сообщите мне, возможны ли какие-либо другие решения.

Ответ 1

Попробуйте использовать getDeviceId(int slotId) добавленный на уровне API 23.

Возвращает уникальный идентификатор устройства подписки, например, IMEI для GSM и MEID для телефонов CDMA. Вернуть ноль, если идентификатор устройства недоступен.

Требуется разрешение: READ_PHONE_STATE

Ответ 2

Мы можем проверить, есть ли один или два sim телефона с помощью Android API и IMEI для каждой сим-карты.

TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Log.i("OmSai ", "Single or Dula Sim "+manager.getPhoneCount());
Log.i("OmSai ", "Defualt device ID "+manager.getDeviceId());
Log.i("OmSai ", "Single 1 "+manager.getDeviceId(0));
Log.i("OmSai ", "Single 2 "+manager.getDeviceId(1));

Ответ 3

TelephonyManager telephony = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    try {

        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());
        Class<?>[] parameter = new Class[1];
        parameter[0] = int.class;
        Method getFirstMethod = telephonyClass.getMethod("getDeviceId", parameter);
        Log.d("SimData", getFirstMethod.toString());
        Object[] obParameter = new Object[1];
        obParameter[0] = 0;
        TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
        String first = (String) getFirstMethod.invoke(telephony, obParameter);
        Log.d("SimData", "first :" + first);
        obParameter[0] = 1;
        String second = (String) getFirstMethod.invoke(telephony, obParameter);
        Log.d("SimData", "Second :" + second);

    } catch (Exception e) {
        e.printStackTrace();
    }

попробуйте использовать это, это должно помочь получить оба идентификатора устройства на android lollipop

Ответ 4

Да, мы можем получить оба номера IMEI. Используя этот ниже код

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String imeiNumber1 = tm.getDeviceId(1); //(API level 23)   
String imeiNumber2 = tm.getDeviceId(2);

Ответ 5

TelephonyManager first = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

Log.d(TAG, "Device Id: " + first.getDeviceId() + ", device status: " + first.getSimState() + ", operator: " + first.getNetworkOperator() + "/" + first.getNetworkOperatorName());

obParameter[0] = 1;
TelephonyManager second = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

Log.d(TAG, "Device Id: " + second.getDeviceId() + ", device status: " + second.getSimState()+ ", operator: " + second.getNetworkOperator() + "/" + second.getNetworkOperatorName());

Ответ 6

AFAIK это невозможно. Явное отражение, которое вы использовали, может работать для некоторых устройств, но не для всех. Однако для этого может быть определенный API-интерфейс производителя.

Цитата Commonsware,

Android не поддерживает несколько SIM-карт, по крайней мере, из SDK. устройство производители, которые создали устройства с несколькими SIM-картами, делают это на своих своя. Вы можете связаться с производителем вашего устройства и посмотреть, у них есть дополнение к SDK или что-то, что позволяет вам получить доступ к вторая SIM-карта.

Ответ 7

Да Android в настоящее время не поддерживается Dual Sim. Но вы можете получить все возможные детали, используя отражение Java.

Я изучаю выборку двух SIM-карт, и она работает на прошитых устройствах
Samsung Galaxy Neo
Moto E
Micromax A52
Холст Micromax
Linovo P780
HTC Dreem
Moto G
LG
HUAWEI Y520-U22
LG-P705
Sony ST26i
Я успешно получаю двойные SIM-карты из вышеперечисленных моделей

Ответ 8

Вы можете использовать этот метод для получения обоих imei. Извините за неудобства. Я торопился.

public static void samsungTwoSims(Context context) {
    TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

try{

        Class<?> telephonyClass = Class.forName(telephony.getClass().getName());

        Class<?>[] parameter = new Class[1];
        parameter[0] = int.class;
        Method getFirstMethod = telephonyClass.getMethod("getDefault", parameter);

        Log.d(TAG, getFirstMethod.toString());

        Object[] obParameter = new Object[1];
        obParameter[0] = 0;
        TelephonyManager first = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + first.getDeviceId() + ", device status: " + first.getSimState() + ", operator: " + first.getNetworkOperator() + "/" + first.getNetworkOperatorName());

        obParameter[0] = 1;
        TelephonyManager second = (TelephonyManager) getFirstMethod.invoke(null, obParameter);

        Log.d(TAG, "Device Id: " + second.getDeviceId() + ", device status: " + second.getSimState()+ ", operator: " + second.getNetworkOperator() + "/" + second.getNetworkOperatorName());
    } catch (Exception e) {
        e.printStackTrace();
    }   
}

Ответ 9

Вы можете IMEI в Android O или выше.

Set<String> deviceIdList = new HashSet<>();
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int phoneCount = telephonyManager.getPhoneCount();
for (int i = 0; i < phoneCount; i++) {
   deviceIdList.add(telephonyManager.getImei(i));
}

Ответ 10

Шаги: 1> У вас должно быть включено разрешение READ_PHONE_STATE

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2> Для Android SDK v23 <= получить IMEI для SIM 1 и SIM 2 следующим образом:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    Log.e("IMEI---1:", tm.getDeviceId(0) );
    Log.e("IMEI---2:", tm.getDeviceId(1) );