【问题标题】:DeviceId() shows me nullpointer?DeviceId() 显示空指针?
【发布时间】:2011-10-15 06:39:27
【问题描述】:

我正在开发一个应用程序,我只需要设备的 IMIE 编号...

我试过了:

telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        imie = telephonyManager.getDeviceId();

在Menifiest:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

让我告诉你,是否需要做其他事情??

提前致谢。

【问题讨论】:

  • 您是否正在使用模拟器并在模拟器上运行此应用?..
  • 你在模拟器上测试吗?在模拟器上它会给出空指针。

标签: android telephony


【解决方案1】:

我认为你做得对,但根据Android Developers Blog

我们已经看到一些生产手机实例,其实现存在错误并返回垃圾,例如零或星号。

另外,它可能无法在模拟器上运行。

【讨论】:

  • 前一天它给了我这样的“000000000”
【解决方案2】:

这不是设备的 IMIE 编号,但如果您只需要设备的标识符,您也可以尝试Build.SERIAL。像 getDeviceId() 一样,该值可能并不总是唯一的或可用的,但它是在第一种方法失败时尝试的另一种选择。

【讨论】:

    【解决方案3】:

    以下可能无法在模拟器上正常运行..

    TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
    String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE
    

    现在有时需要从非电话设备(例如平板电脑)获取唯一号码,那时我们可以创建伪唯一 ID,该 ID 适用于所有提供唯一号码(如 IMIE)的 Android 设备。以这种方式计算的 ID 不会是唯一的:可以找到具有相同 ID 的两个设备(基于相同的硬件和 ROM 映像),但在现实世界的应用程序中的机会可以忽略不计。为此,您可以使用 Build 类:

    String PUID = Build.BOARD.length()%10+ Build.BRAND.length()%10 +
                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
                Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
                Build.TAGS.length()%10 + Build.TYPE.length()%10 +
                Build.USER.length()%10 ;
    

    PUID 将返回 13 位数字,我们在前面添加两个 (35) 以具有与 IMEI 相同大小的 ID(15 位数字)。

     PUID = "35" + PUID;
    

    很棒的想法是我们不需要使用上面的代码添加 READ_PHONE_STATE 权限。

    有关生成唯一号码的更多帮助,请访问pocket magic.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多