【问题标题】:Issue on getting IMEI number on few brand devices(Huawei)在少数品牌设备上获取IMEI号码的问题(华为)
【发布时间】:2019-02-07 09:23:48
【问题描述】:

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

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

对于双卡设备 - 它只需要第一个 IMEI 通过一条线

IME = mTelephony.getDeviceId(0);

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

【问题讨论】:

    标签: android imei


    【解决方案1】:

    我用这种方式,它对我有用,试试看

    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 编写的,但你可以知道我在做什么,你可以再简化一点

    【讨论】:

    • 在双卡的情况下 - 它会一直返回 SIM1 的 IMEI 吗?
    • 我还没有具体测试。但我想是的。
    【解决方案2】:

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

    使用 getImei() 代替 API 26 及更高版本。

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2014-05-12
      • 2019-03-21
      • 1970-01-01
      • 2010-10-15
      • 2018-11-15
      • 1970-01-01
      • 2013-01-11
      • 2018-01-04
      相关资源
      最近更新 更多