android - 如何在 Verizon(CDMA 语音/LTE 数据)设备上获取 IMEI?

标签 android imei cdma

getDeviceId() 返回 Verizon 手机上的 14 位 MEID(因为它是 CDMA 语音设备)。是否有一种编程方式来获取 15 位 IMEI(如“设置”菜单中列出的那样)?

最佳答案

免责声明: 解决方案使用未发布的 API。这并不代表最佳实践,并且可能会导致意外结果。 API 可能未实现或可能发生变化。使用风险由您自行承担。

有一种方法可以通过反射和隐藏的 Android API 调用来做到这一点。 TelephonyManager 有一个公共(public)(但隐藏)方法 getImei()。并不理想,但以下内容可以满足我的特殊需求。

private String getIMEI() throws NoIMEIException {
    TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Method method = mTelephonyMgr.getClass().getMethod("getImei");
        String imei = (String) method.invoke(mTelephonyMgr);
        if (imei == null) {
            throw new NoIMEIException();
        } else {
            return imei;
        }
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
        throw new NoIMEIException();
    }
}

关于android - 如何在 Verizon(CDMA 语音/LTE 数据)设备上获取 IMEI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944116/

相关文章:

android - 工具命名空间android listitem

android - 在 Mac OS X 上为 Nexus 7 编译 Android 内核时找不到“elf.h”文件错误

android - TelephonyManager 为 IMEI 号码 : what can cause this? 返回 null

java - Android:如果 Wifi 打开,则强制打开数据网络。在 GSM 上工作失败 CDMA 设备

android - 如何从 onResume 调用 onMapReady()

java - 简单的 Picasa 图片上传代码示例

iphone - iPhone 中的 IMEI 替换

android - 在所有android设备中获取多个imei号码

ios - 我的 iOS 游戏在 GSM 上运行良好,但无法在 CDMA 上运行

android - TelephonyManager.getPhoneType 的值是跟phone 和一个固定的常量有关还是跟sim 卡有关?