獲取Android裝置的唯一識別碼
阿新 • • 發佈:2019-01-08
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();