Программно получить номер 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) );