2014-02-20 38 views
9

我尝试使用下面的代码设备ID给予NULL值

TelephonyManager tManager; 

tManager = (TelephonyManager).getSystemService(Context.TELEPHONY_SERVICE); 

String deviceId = tManager.getDeviceId(); 

deviceId让我对Android设备的唯一ID来获得的唯一ID [I.E unique id of a device]。因为在模拟器我得到价值000000000000000

任何方式我在真实设备上测试它,我不能在模拟器中进行测试这一点,并能正常工作的大多是所有的设备,但在某些设备我得到价值null

我已经

Samsung Galaxy S3 

Samsung Galaxy Tab3 

Samsung Galaxy Star 

Google Nexus4 

Google Nexus5 

Google Nexus7 

测试这在它上面列出的所有设备让我改正了把除了一个设备,这是Google Nexus7,在这个即时得到价值null

所以,最终我的目标是获得独特的价值为每个特定的设备,在情况下,如果这个代码给我空值,比我可以尝试一些替代方法

我听说Device MAC Address是一个独特的所有设备,但不幸的是它只适用于无线连接。

那么有没有其他方法可以获得每个特定设备的独特价值?

感谢任何方式

+0

检查这是否有帮助http://stackoverflow.com/questions/16869482/how-to-get-unique-device-hardware-id-in-android/16869491#16869491 – Raghunandan

+1

是什么原因的倒票?奇怪的 – Aamirkhan

+0

你可以使用[这个库](https://github.com/delight-im/Android-BaseLib)来为每个设备生成一个唯一的标识符[Identity.getDeviceId(context)](https://github.com /delight-im/Android-BaseLib/blob/master/Source/src/im/delight/android/baselib/Identity.java),可以在任何情况下使用。 – caw

回答

11

你真的不应该使用ANDROID_ID,你有没有真正的保证,它会给你的设备的唯一标识符,它是已知的,一些旧的设备给出了值null,或就像Moto的情况一样,多个设备之间的静态值相同。当手机重置为出厂默认设置时,此值也会发生变化,并且可以非常容易地在根用户设备上进行更改。

正确的方法是通过生成自己的UUID。

String uudid = UUID.randomUUID() 

你然后通过SharedPreference把它保存在你的应用程序,例如。即使用户卸载您的应用程序,您也可以使用Google的Android备份存储来保留此标识符。在这里备份

的更多信息:http://developer.android.com/guide/topics/data/backup.html

如果你不把我的话,你应该采取雷托·梅尔的话吧,他是在谷歌Android团队的开发人员倡导者。这段视频将解释我刚刚告诉你的情况,大约15分钟前查看,他还特别指示开发人员不要使用ANDROID_ID

http://www.youtube.com/watch?v=twmuBbC_oB8&list=WL86437554BC3E54B5

+0

@Aღmirkhan这些Android I/O视频中有很多好的信息,我建议仔细看看它们。 –

+0

你想给谷歌的Android备份存储备份标识符教程链接?!谢谢 –