Java 本身提供的 UUID,是不是還有其他的方法呢?
以下整理了五種方法(Test with Sony ZL 4.4.2):
- UUID
利用 UUID 類別的方法 randomUUID() 產生一組 128-bit 組成的 UUID:String uuid = UUID.randomUUID().toString(); Log.d(TAG, "UUID: " + uuid); // UUID: faffffe6-a504-4252-b92a-c5b555811123
- IMEI/MEID/ESN
利用 TelephonyManager 類別的方法 getDeviceId(),在 GSM 的手機上取得 IMEI 或
在 CDMA 的手機上取得 MEID 或 ESN 的值:// Required permission: android.permission.READ_PHONE_STATE TelephonyManager telManager=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); String imei = telManager.getDeviceId(); Log.d(TAG, "IMEI: " + imei); // IMEI: 3553XXXXXXXXXXX
- Android ID
取得由靜態類別 Secure 的靜態變數 ANDROID_ID 所表示的 16進位字串。String androidID = Secure.getString(this.getBaseContext().getContentResolver(), Secure.ANDROID_ID) Log.d(TAG, "Android ID: " + imei); // Android ID: 826458105eXXXXXX
Note: 有些廠商的手機的 Android ID 有重複出現的情況,而且一但使用者回復原廠設定
時,此 ID 有可能會改變。
- Wifi Mac
透過 WifiInfo 類別的方法 getMacAddress() 取得 Mac Address:// Required permission: android.permission.ACCESS_WIFI_STATE WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); Log.d(TAG, "MacAddress: " + wifiInfo.getMacAddress()); // MacAddress: b4:XX:XX:XX:42:fc
Note: 沒有開啟 Wifi 時可能會回傳 null,但 Sony ZL 是都要的到。
- Serial
透過 Build 類別的靜態變數 SERIAL 取得手機的硬體序號:String buildSerial = android.os.Build.SERIAL; Log.d(TAG, "BuildSerial: " + buildSerial); // BuildSerial: EP7323XXXX
Note: API Level 9 以上才支援,不保證每台裝置都有。
Ref: http://android-developers.blogspot.tw/2011/03/identifying-app-installations.html