Как получить 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();
    }
}
Другие вопросы по тегам