我正在尝试使用以下代码
获取唯一ID[I.E unique id of a device]
TelephonyManager tManager;
tManager = (TelephonyManager).getSystemService(Context.TELEPHONY_SERVICE);
String deviceId = tManager.getDeviceId();
deviceId
为我提供Android设备的唯一ID。我没有在模拟器上测试它,因为在模拟器中我得到了值000000000000000
我在实际设备上测试它的任何方式,这适用于大多数设备,但在某些设备中我获得了价值null
我在
上测试了这个Samsung Galaxy S3
Samsung Galaxy Tab3
Samsung Galaxy Star
Google Nexus4
Google Nexus5
Google Nexus7
在上面列出的所有设备中,它为我提供了正确的输出,除了一个设备Google Nexus7
,在此我得到的值null
所以,最终我的目标是为每个特定设备获取唯一值,如果此代码给我空值而不是我可以尝试其他方式
我听说Device MAC Address
对所有设备都是唯一的,但遗憾的是它只适用于wifi连接。
有没有其他方法可以获得每个特定设备的独特价值?
非常感谢
答案 0 :(得分:13)
你不应该真正使用ANDROID_ID,你没有真正保证它会为你提供设备的唯一标识符,并且已知某些旧设备会给出值null
,或者在Moto的情况下,跨多个设备的相同静态值。当手机重置为出厂默认设置时,此值也会更改,并且在根设备上更容易更改。
正确的方法是通过。
生成自己的UUIDString uudid = UUID.randomUUID()
然后将其保存在您的应用中,例如通过SharedPreference
。然后,即使用户卸载了您的应用,您也可以使用Google的Android备份存储来保留此标识符。
有关此处备份的详细信息:http://developer.android.com/guide/topics/data/backup.html
如果你不接受我的话,你应该接受Reto Meier的话,他是谷歌Android团队的开发者倡导者。这段视频将解释我刚刚告诉你的内容,在第15分钟左右检查,他还特别指示开发人员不要使用ANDROID_ID
。
http://www.youtube.com/watch?v=twmuBbC_oB8&list=WL86437554BC3E54B5