关于android:设备ID提供null值

Device ID Giving null Value

本问题已经有最佳答案,请猛点这里访问。

我试图通过使用下面的代码获得唯一的id[I.E unique id of a device]

1
2
3
4
5
TelephonyManager tManager;

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

String deviceId = tManager.getDeviceId();

其中deviceId为Android设备提供了唯一的ID。我没有在Emulator上测试这个,因为在Emulator中我得到的是值000000000000000

不管怎样,我在真实的设备上测试它,这对大多数设备都很好,但在某些设备中,我得到的是值null

我在上面测试过这个

1
2
3
4
5
6
7
8
9
10
11
Samsung Galaxy S3

Samsung Galaxy Tab3

Samsung Galaxy Star

Google Nexus4

Google Nexus5

Google Nexus7

在上面列出的所有设备中,除了一个设备外,它给出了正确的输出,即Google Nexus7,在这里,我得到的值是null

所以,最终我的目标是为每个特定的设备获取唯一的值,以防这段代码给了我空值,我可以尝试其他方法

我听说Device MAC Address对于所有设备都是独一无二的,但不幸的是它只在WiFi连接上工作。

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

谢谢任何方式


你不应该真的使用Android_id,你没有真正的保证它会给你一个设备的唯一标识符,而且我们知道一些老设备会给null的值,或者像moto的情况一样,在多个设备上给相同的静态值。当手机重置为出厂默认值时,此值也会发生变化,而且在根设备上更改非常容易。

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

1
String uudid = UUID.randomUUID()

然后将其保存在应用程序中,例如通过SharedPreference保存。然后,即使用户卸载了你的应用程序,你也可以使用谷歌的Android备份存储来保留这个标识符。

有关备份的详细信息,请访问:http://developer.android.com/guide/topics/data/backup.html

如果你不相信我的话,你应该相信雷托·迈尔的话,他是谷歌安卓团队的开发者拥护者。这段视频将解释我刚刚告诉你的,查看第15分钟左右,他还特别指示开发人员不要使用ANDROID_ID

http://www.youtube.com/watch?v=twmubbc_ob8&list=wl86437554bc3e54b5