使用mtk6573的時候,串連adb, eclipse, 91助手,顯示的都是 0123456789ABCDEF。
這是手機的裝置序號。如何擷取一個能唯一標識每台Android裝置的序號?
這個問題有很多答案,但是他們中的大部分只在某些情況下有效。
根據測試:
1) 所有的裝置都可以返回一個 TelephonyManager.getDeviceId()
2)所有的GSM裝置 (測試裝置都裝載有SIM卡) 可以返回一個TelephonyManager.getSimSerialNumber()
3)所有的CDMA 裝置對於 getSimSerialNumber() 卻返回一個空值!
4)所有添加有Google賬戶的裝置可以返回一個 ANDROID_ID
5)所有的CDMA裝置對於 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在設定時添加了Google賬戶)
6)目前尚未測試的:沒有SIM卡的GSM裝置、沒有添加Google賬戶的GSM裝置、處于飛行模式的裝置。
所以如果你想得到裝置的唯一序號, TelephonyManager.getDeviceId() 就足夠了。但很明顯暴露了DeviceID會使一些使用者不滿,所以最好把這些id加密了。實際上加密後的序號仍然可以唯一的識別該裝置,並且不會明顯的暴露使用者的特定裝置,例如,使用
String.hashCode() ,結合UUID:
1 |
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
|
3 |
final
String tmDevice, tmSerial, tmPhone, androidId; |
4 |
tmDevice =
"" + tm.getDeviceId();
|
5 |
tmSerial =
"" + tm.getSimSerialNumber();
|
6 |
androidId =
"" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
|
8 |
UUID deviceUuid =
new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() <<
32) | tmSerial.hashCode());
|
9 |
String uniqueId = deviceUuid.toString(); |
最後的deviceID可能是這樣的結果: 00000000-54b3-e7c7-0000-000046bffd97
一般這個裝置序號在這個結構體中填充的xxx_hsusb_pdata,或者
在KERNEL下搜serial_number,或者直接搜你自己的裝置號
“0123456789ABCDEF“就好了 。
mtk6573請在Mt6573_devs.c (mediatek\platform\mt6573\kernel\core): memcpy(serial_number,"0123456789ABCDEF",16); 修改