2011-10-15 68 views
-1

我正在開發中,一個應用程序,我只需要設備的IMIE號碼...DeviceId()顯示我nullpointer?

我想:

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

在Menifiest:

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

讓我告訴,如果需要任何其他事情要做?

在此先感謝。

+0

更多的幫助,您是否使用模擬器運行在模擬器?.. –

+0

你在模擬器中進行測試這個程序?在模擬器上它會給出空指針。 – anujprashar

+0

雅我在模擬器中測試。 – Siten

回答

0

我覺得你這樣做是對的,但根據Android Developers Blog

我們已經看到,生產手機爲其實現車和返回的垃圾,例如零或星號的幾個實例。

此外,它可能不會在模擬器上工作。

+0

有一天它給了我「000000000」那樣 – Siten

+0

suddendly它給了我空指針 – Siten

0

這不是設備的IMIE號碼,但如果您只需要該設備的標識符,則還可以嘗試Build.SERIAL。與getDeviceId()類似,該值可能並不總是唯一的或可用的,但當第一種方法失敗時,它是另一種嘗試。

+0

意味着我怎麼能用它? – Siten

0

下可能無法在仿真器正常工作..

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

現在有時它需要在那個時候,我們可以創建僞唯一的ID來獲得來自非電話設備(如平板電腦)的唯一編號,即適用於所有Android設備,並提供像IMIE這樣的獨特編號。以這種方式計算出的ID不會是唯一的:可以找到兩個具有相同ID的設備(基於相同的硬件和ROM映像),但實際應用中的可能性可以忽略不計。爲了這個目的,你可以使用生成類:

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)具有相同的尺寸ID,如IMEI(15位)。

PUID = "35" + PUID; 

很好的想法是,我們不需要使用上面的代碼添加READ_PHONE_STATE權限。

對於生成唯一編號的訪問pocket magic.