DeviceId()显示nullpointer?

时间:2011-10-15 06:39:28

标签: android telephony

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

我试过了:

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

In Menifiest:

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

让我告诉,如果需要做任何其他事情吗?

提前感谢。

3 个答案:

答案 0 :(得分:0)

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

  

我们已经看到了一些生产手机的实例,这些手机的实施都是错误的,并且会返回垃圾,例如零或星号。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

现在有时需要从非电话设备(例如平板电脑)获取唯一号码,我们可以创建伪唯一ID,该ID适用于所有Android设备,提供像IMIE这样的唯一号码。以这种方式计算的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(15位数)相同的大小ID。

 PUID = "35" + PUID;

并且很好地认为我们不需要使用上面的代码添加READ_PHONE_STATE权限。

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