Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android能夠獲取到唯一的設備ID嗎?

Android能夠獲取到唯一的設備ID嗎?

編輯:關於Android編程

Android是否有唯一的設備ID,如果有的話,該怎樣快速有效獲取?   Settings.Secure#ANDROID_ID 返回Android ID ,是一個64位的16進制字符串                 import   android.provider.Settings.Secure;           private   String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);       關於這個問題有很多的答案,不過其中大部分將只能算是答對了一部分,還不夠好。   根據我在很多設備上的測試(所有的電話,至少有一個是無效的)   所有設備針對 TelephonyManager.getDeviceId() 測試都有返回值 所有GSM設備(都有SIM卡)針對 TelephonyManager.getSimSerialNumber() 測試都有返回值 所有CDMA設備針對 getSimSerialNumber() 測試返回 NULL(預期中的) 所有有谷歌帳戶的設備都返回了 ANDROID_ID 值 所有的CDMA設備針對 ANDROID_ID 和 TelephonyManager.getDeviceId() 都返回相同的值(或派生自同一個值) - 前提是安裝過程中已經添加了谷歌帳戶。 我還沒有機會測試沒有SIM卡的GSM設備,沒有谷歌賬戶的GSM設備,以及任何在飛行模式下的設備。 所以,如果你想要得到設備本身的唯一值, TM.getDeviceId()應該是足夠了。不過顯然的,有些用戶比其他人更加偏執一些,可以將這些標識中的一個或者多個進行hash運算就很有用,生成的字符串仍然可以唯一標識該設備,但是不會明確的標識實際的設備。例如,使用String.hashCode(),再加上一個UUID:             final   TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);           final   String tmDevice, tmSerial, androidId;     tmDevice  = ""   + tm.getDeviceId();     tmSerial  = ""   + tm.getSimSerialNumber();     androidId  = ""   + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);           UUID  deviceUuid = new   UUID(androidId.hashCode(), ((long)tmDevice.hashCode()  << 32)  | tmSerial.hashCode());     String  deviceId = deviceUuid.toString();           結果可能類似 :00000000-54b3-e7c7-0000-000046bffd97   對我來說這種方式已經足夠了   別忘了增加權限,用於讀取 TelephonyManager properties,在manifest 中增加下面一行:         1         <uses-permission   android:name="android.permission.READ_PHONE_STATE"   />  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved