Как получить IMEI на устройстве Verizon (CDMA vioice / LTE Data)?
getDeviceId()
возвращает 14-значный MEID на телефонах Verizon (потому что это голосовое устройство CDMA). Есть ли программный способ получить 15-значный IMEI (как указано в меню "Настройки")?
1 ответ
Решение
Отказ от ответственности: Решение использует неопубликованные API. Это не является наилучшей практикой и может привести к непредвиденным результатам. API может быть не реализован или может измениться. Используйте на свой риск.
Есть способ сделать это с помощью отражения и скрытого вызова Android API. TelephonyManager имеет открытый (но скрытый) метод getImei(). Не идеально, но следующее работает для моей конкретной потребности.
private String getIMEI() throws NoIMEIException {
TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
try {
Method method = mTelephonyMgr.getClass().getMethod("getImei");
String imei = (String) method.invoke(mTelephonyMgr);
if (imei == null) {
throw new NoIMEIException();
} else {
return imei;
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new NoIMEIException();
}
}