getDeviceId()
возвращает 14-значный MEID на телефонах Verizon (поскольку это голосовое устройство CDMA). Есть ли программный способ получить 15-значный IMEI (как он указан в меню «Настройки»)?Как вы получаете IMEI на устройстве Verizon (CDMA vioice/LTE Data)?
2
A
ответ
2
Отказ от ответственности:Решение использует не опубликованные API. Это не является наилучшей практикой и может привести к непреднамеренным результатам. API не может быть реализован или может измениться. Используйте на свой риск.
Существует способ сделать это с отражением и скрытым вызовом API Android. 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();
}
}
Фактически, это единственный ответ, который помог мне, используя android 5.0 и 6.0. Я получаю 14 цифр IMEI, используяTelephonyManager.getDeviceId(). – AndroidCoolestRulest