如何在Android中获取唯一设备硬件ID?

126

如何在Android中获取唯一设备ID,在手机重置或操作系统更新时无法更改?


只需尝试加载一个测试add,成功加载后,您将在logcat中看到您的设备ID。 - Akash Chaudhary
3个回答

180

更新:2019年11月19日

下面的答案已经不再适用于现在。

因此,对于任何正在寻找答案的人,您应该查看下面链接的文档:

https://developer.android.com/training/articles/user-data-ids


旧答案 - 现在不相关。

您可以在以下链接的博客中检查此内容:

http://android-developers.blogspot.in/2011/03/identifying-app-installations.html

ANDROID_ID

import android.provider.Settings.Secure;

private String android_id = Secure.getString(getContext().getContentResolver(),
                                                    Secure.ANDROID_ID); 

上述内容来自链接 @ Is there a unique Android device ID?

更具体地说,它是指Settings.Secure.ANDROID_ID。这是一个64位的数量,在设备首次启动时生成并存储。如果设备被擦除,它将被重置

ANDROID_ID似乎是唯一设备标识符的不错选择。存在缺点:首先,在Android 2.2(“Froyo”)之前的版本中,它不是100%可靠。此外,至少有一个广为人知的问题出现在来自一家主要生产商的流行手机上,每个实例都具有相同的ANDROID_ID。

以下解决方案不是一个好选择,因为该值可以在设备清除(“恢复出厂设置”)后保留,并且因此当您的客户清除他们的设备并将其传递给另一个人时,您可能会犯一个严重的错误

您可以使用以下方法获取设备的IMEI号码

  TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  telephonyManager.getDeviceId();

http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId%28%29

将此添加到清单文件中

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

6
制造后,手机的IMEI号码不应该发生变化。但是这个假设只适用于设备是手机的情况,这个假设并不可靠。 - DrC
3
我的评论说这不是相关的答案,他可能在网上找到了这个解决方案或者已经实施过了,因为在stackoverflow上已经有很多类似的讨论了。但是他的问题是,“在手机重置或操作系统更新后不能更改的唯一设备ID”。 - Paresh Mayani
@Drc同意。说得好。所以在这种情况下,我的答案不是最佳解决方案。 - Raghunandan
@Raghunandan 很好的回答,我相信它与这里所问的问题非常相关。您很好地指出了来自“TelephonyManager”的ID实际上是唯一的,但可能会对服务器的用户/会话管理造成严重问题。顺便说一句,那个有问题的设备是摩托罗拉Droid 2。 - sud007
1
@KiranManiya 是的,我明白。我会更新这篇文章。 - Raghunandan
显示剩余7条评论

30

我使用以下代码来获取Android id。

String android_id = Secure.getString(this.getContentResolver(),
            Secure.ANDROID_ID);

Log.d("Android","Android ID : "+android_id);

在此输入图片描述


10
ANDROID_ID 可以使用,但根据文件说明:这是一个64位的值,在设备首次启动时生成并存储。当设备被擦除时,它会被重置。 - Paresh Mayani
1
感谢回复。但是在设备重置时,ANDROID_ID会发生变化。我想要一个基于硬件的ID,并且不会因操作系统更改而改变。 - PrvN
你知道我怎么才能从我的手机上直接获取与此相同的ID输出吗?(例如,如果我想获取IMEI,我只需键入:*#06#) - Anis LOUNIS aka AnixPasBesoin
这个安卓ID是唯一的吗? - Fatih Mert Doğancan
那么安卓的唯一标识符是什么? - Amin Pinjari
显示剩余2条评论

5
请阅读Google开发者博客上的官方博客文章: http://android-developers.blogspot.be/2011/03/identifying-app-installations.html 结论:对于绝大多数应用程序,要求的是识别特定的安装,而不是物理设备。幸运的是,这很简单。
有许多很好的理由避免试图识别特定的设备。对于那些想尝试的人来说,最好的方法可能是在任何比较现代的设备上使用ANDROID_ID,并为旧设备提供一些后备启发式方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接