Проблема с получением номера 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 и выше.