在少数品牌设备上获取IMEI号码的问题(华为)

时间:2019-02-07 09:23:48

标签: android imei

对于我的应用,我正在获得设备 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();
        }

除了华为设备

,这在大多数设备(可能是所有设备)上都运行良好

对于双SIM卡设备-仅需通过一条线路即可获得第一个IMEI

IME = mTelephony.getDeviceId(0);

但是,问题有时是获得第二个 IMEI 号码

2 个答案:

答案 0 :(得分:0)

我使用这种方式,它对我有用,尝试一下

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编写,但是您可以了解我在做什么,可以进一步简化它

答案 1 :(得分:0)

getDeviceId(int slot)在API级别26中已弃用。

对于API 26及更高版本,请使用getImei()