TelephonyManager 为 IMEI 号码返回 null:这可能是啥原因?

Posted

技术标签:

【中文标题】TelephonyManager 为 IMEI 号码返回 null:这可能是啥原因?【英文标题】:TelephonyManager returns null for IMEI number: what can cause this?TelephonyManager 为 IMEI 号码返回 null:这可能是什么原因? 【发布时间】:2016-05-11 11:49:32 【问题描述】:

我正在开发一个 android 应用程序,并且在使用 TelophonyManager 时收到了 null 的 IMEI 号码。这发生在几款华为手机上。 (都是 Ascend Y530)。

这些手机都有 SIM 卡,其他方面似乎运行正常。我的印象是只有坏掉的手机才会返回null IMEI。显然不是这样的..

问题。这个 IMEI 号码到底是什么 - 即它存储在设备上的什么位置?当一部看似不错的手机返回其值为null时,这意味着什么?

编辑

我应该提一下,IMEI 号码并不总是null。大约有一半的时间似乎是有效的(尽管这很难衡量,因为我们有 5 部手机返回空 IMEI 号码 \有时

【问题讨论】:

能否请您尝试拨打*#06#,并确认电话是否有有效的IMEI号码? 这些电话已远程部署,因此我无法访问它们。据我了解,我们的客户使用 *#06# 获取 IMEI 号码从来没有遇到过问题? 请联系客户要求他们为您确认 我会问的。他们至少 4 次向我提供了 IMEI 号码,并且从未提及看到 null - 这些手机为 IMEI 号码返回 null。我应该提一下,这种情况并非一直发生(我会说大约一半的时间)。我们有一个调查应用程序,每个调查都应该通过一个 IMEI 号码发送,没有它他们是匿名的,这对我们没有用处 好的,知道了,根据你的需要我可以给你一个答案,对你有帮助:) 【参考方案1】:

在您发表评论后,要获得调查应用程序的唯一设备 ID,我建议您使用 Settings.Secure.ANDROID_ID 作为您的唯一 ID。

String   myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);

或者你可以同时使用

public String getUniqueID()    
    String myAndroidDeviceId = "";
    TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    if (mTelephony.getDeviceId() != null)
        myAndroidDeviceId = mTelephony.getDeviceId(); 
    else
         myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID); 
    
    return myAndroidDeviceId;

【讨论】:

谢谢。我明天会实施这个:) 从技术上讲,我很想知道这个问题的可能原因是什么? 是的,适用于所有手机@ZachSmith 在 Android Q 上获取 IMEI 为空?有人也发现了吗? imei 在 Android 10 及更高版本上受限,因此普通应用无法获取它:developer.android.com/about/versions/10/privacy/…

以上是关于TelephonyManager 为 IMEI 号码返回 null:这可能是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章

关于手机系统信息的总结

在android中使用电话管理器查找IMEI号码

Android读取用户号码,手机串号,SIM卡序列号的实现代码

android如何通过adb命令获取手机的IMEI

Android关于设备唯一标识符的获取,适配Android10

如何获取Android唯一标识