android - 设备 ID 给出空值

标签 android

<分区>

我正在尝试使用以下代码获取唯一 ID[I.E 设备的唯一 ID]

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 连接。

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

谢谢

最佳答案

您不应该真正使用 ANDROID_ID,您无法真正保证它会为您提供设备的唯一标识符,并且众所周知,某些较旧的设备会提供值 null,或者作为在 Moto 的例子中,跨多个设备的相同静态值。当手机重置为出厂默认设置时,此值也会更改,并且在已获得 root 权限的设备上更改起来非常容易。

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

String uudid = UUID.randomUUID()

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

有关备份的更多信息,请点击此处:http://developer.android.com/guide/topics/data/backup.html

如果您不相信我的话,您应该相信 Reto Meier 的话,他是 Google Android 团队的开发者倡导者。这个视频会解释我刚才跟你说的,看看第15分钟左右,他还特别指示开发者不要使用ANDROID_ID

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

关于android - 设备 ID 给出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910102/

相关文章:

java - Android/Java 类事件

Android Studio 单元测试 : read data (input) file

android - 永久广播接收器?

Android 服务被 ANR 杀死

android - 如何将pdf转换为图像?

java - 如何将 Android 支持 v7 库加载到 SBT Android 项目中?

android - WebView 无限扩展 - 如何防止这种情况发生?

android - 在 Android Gradle 中禁用发布版本的代码

android - 使用 exoplayer 从 azure 媒体服务获取 Widevine 离线许可证

java - 如何在自定义 key 子项中创建子项?