猜想你已经完成了同步过程(@Nishant B 的帖子),现在对于唯一 ID,这里是几乎适用于所有 Android 设备(Tab + Mobile)的代码片段。
现在如您所知,Android 中无法保证任何唯一 ID,因此最好创建一个密钥,该密钥将在每次生成时生成为多个密钥和唯一的组合...
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE
String m_szDevIDShort = "35" + //we make this look like a valid IMEI
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 digits
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_szBTMAC = m_BluetoothAdapter.getAddress();
String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
String m_szLongID = m_szImei + m_szDevIDShort + m_szWLANMAC + m_szBTMAC;
// compute md5
MessageDigest m = null;
try {
m = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
m.update(m_szLongID.getBytes(),0,m_szLongID.length());
// get md5 bytes
byte p_md5Data[] = m.digest();
// create a hex string
String m_szUniqueID = new String();
for (int i=0;i<p_md5Data.length;i++) {
int b = (0xFF & p_md5Data[i]);
// if it is a single digit, make sure it have 0 in front (proper padding)
if (b <= 0xF) m_szUniqueID+="0";
// add number to string
m_szUniqueID+=Integer.toHexString(b);
}
// hex string to uppercase
m_szUniqueID = m_szUniqueID.toUpperCase();
在这里,我们获取了 IMEI、制造商板详细信息、Wifi 地址和蓝牙地址(出厂重置时不将 ANDROID_ID 作为其更改)。m_szUniqueID
结合这些密钥,可以在 MD5 的帮助下生成唯一密钥( )。
我确信在上面的帮助下,您每次都可以生成一个唯一的密钥。
好点:
- 它在同一设备上的连续生成中没有变化,这意味着一个设备将只有一个 ID,即唯一。
- 甚至可以使用未注册的设备,即没有 IMEI 号码的设备。
- 也适用于平板电脑。