Проблема с получением номера IMEI на нескольких фирменных устройствах (Huawei) - PullRequest
0 голосов
/ 07 февраля 2019

Для моего приложения я получаю устройство 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

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

IME = mTelephony.getDeviceId(0);

Но проблема в получении второго IMEI номера, иногда

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

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

Использовать getImei() вместо API 26 и выше.

0 голосов
/ 07 февраля 2019

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

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, но вы можете понять, что я делаю, Вы можете упростить это немного больше

...