Проблема с получением номера IMEI на нескольких фирменных устройствах (Huawei)

Для моего приложения я получаю IMEI устройства для уникального значения.

Чтобы получить IMEI у меня есть следующий код

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (mTelephony.getPhoneCount() == 2) {
                // Dual sim
                IME = mTelephony.getDeviceId(0);
            } else {
                IME = mTelephony.getDeviceId();
            }
        } else {
            IME = mTelephony.getDeviceId();
        }

Это работает хорошо на большинстве устройств (может быть на всех устройствах), за исключением устройств Huawei

Для устройства с двумя сим-картами - только первый IMEI через линию

IME = mTelephony.getDeviceId(0);

Но проблема заключается в том, чтобы иногда получить второй номер IMEI

2 ответа

Я использую этот способ, и он работает для меня, попробуйте

fun getDeviceIMEI(context: Context): String? {

try {
    val mTelephonyMgr = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager


    if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
        == PackageManager.PERMISSION_GRANTED
    ) {
        // Permission is  granted
        val imei: String? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mTelephonyMgr.imei
        } else { // older OS  versions
            mTelephonyMgr.getDeviceId()
        }

        if (imei != null) {
            return imei
        }

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

return null
}

Это написано на kotlin, но вы можете понять, что я делаю, Вы можете упростить это немного больше

getDeviceId(int slot) устарел на уровне API 26.

использование getImei() вместо этого для API 26 и выше.

Другие вопросы по тегам