Android - unique and constant device ID
我需要在服务器上注册用户设备,其唯一标识符是一个常量值,并且将来不会更改。
我找不到一个很好的解决方案来获取所有设备的唯一ID(有/没有simcard)。
Secure.ANDROID_ID:Secure.ANDROID_ID不是唯一的,可以为null或在出厂重置时更改。
1 | String m_androidId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); |
IMEI:IMEI依赖于设备的Simcard插槽,因此无法为不使用Simcard的设备获取IMEI。
1 2 | TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String uuid = tManager.getDeviceId(); |
WLAN MAC地址:如果设备没有wifi硬件,则返回空MAC地址。用户可以更改设备的mac地址。
1 2 | WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress(); |
蓝牙地址字符串:如果设备没有蓝牙硬件,则返回null。
1 2 | BluetoothAdapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_bluetoothAdd = m_BluetoothAdapter.getAddress(); |
实例ID:当用户卸载并重新安装应用程序时,instance_id将会更改。而且它不是一个恒定的价值。
您是否有任何想法从所有Android设备(有/没有SIM卡,蓝牙......)获得一个唯一的ID,它真的是唯一的,不能为空并且在卸载/重新安装应用后不会改变?
我发现Secure.ANDROID_ID是最好的选择。 这是在设备首次启动时生成并存储的64位数量。 但它会重置设备出厂重置。
有一些报告显示某些设备在所有实例上都具有相同的Secure.ANDROID_ID。
我们可以向Secure.ANDROID_ID添加额外的项目(如SIM序列,GCM实例ID或...)并生成新的唯一指纹。
可以在Android设备上设置多个用户,并且对于同一Android设备上的每个用户,Secure.ANDROID_ID都是不同的。 因此,使用Secure.ANDROID_ID意味着单个设备将被注册为设备上每个用户设置的不同设备。
Secure.ANDROID_ID是您唯一的朋友。 然而,它在旧(<2.3)设备上存在一些问题(空结果)。 所有其他ID不适用于所有类型的设备。
另请阅读是否有唯一的Android设备ID?