1. 程式人生 > >獲取Android裝置的唯一識別碼

獲取Android裝置的唯一識別碼



1、所有的裝置都可以返回一個 TelephonyManager.getDeviceId()

2、所有的GSM裝置 (測試裝置都裝載有SIM卡) 可以返回一個TelephonyManager.getSimSerialNumber()

3、所有的CDMA 裝置對於 getSimSerialNumber() 卻返回一個空值!

4、所有新增有谷歌賬戶的裝置可以返回一個 ANDROID_ID

5、所有的CDMA裝置對於 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在設定時添加了谷歌賬戶)

所以如果你想得到裝置的唯一序號, TelephonyManager.getDeviceId()

 就足夠了。但很明顯暴露了DeviceID,實際上加密後的序號仍然可以唯一的識別該裝置,並且不會明顯的暴露使用者的特定裝置,例如,使用 String.hashCode() ,結合UUID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); final String tmDevice, tmSerial, tmPhone, 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 uniqueId = deviceUuid.toString();