如何在 android 10 中获取唯一的设备 ID?
Posted
技术标签:
【中文标题】如何在 android 10 中获取唯一的设备 ID?【英文标题】:How can I get unique device id in android 10? 【发布时间】:2020-06-15 11:36:06 【问题描述】:我想在我的应用程序中获得一个唯一的设备 ID。但根据谷歌文档,android 10 增加了对不可重置标识符的限制。
我不想要随机 ID。我想获得唯一的 id,这样我就可以识别出我的 API 来自哪个设备。这样,我就可以管理我的会话了。除了 Secure.android_id 之外,还有另一个唯一的 id 对 android 是唯一的吗?或者有什么方法可以访问 Android 10 中的 Secure.android_id。
【问题讨论】:
您可以通过以下链接了解您的选择并做出相应决定:developer.android.com/training/articles/user-data-ids 【参考方案1】:无论你尝试连接wifi时是否使用随机地址,都将通过以下代码获取wifi mac地址(对于小米等某些设备,这将返回wifi-direct mac地址)与否,无论wifi是打开还是关闭。
我使用了下面链接中的一种方法,并添加了一个小的修改来获得确切的地址而不是随机地址:
Getting MAC address in Android 6.0
public static String getMacAddr()
StringBuilder res1 = new StringBuilder();
try
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all)
if (!nif.getName().equalsIgnoreCase("p2p0")) continue;
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null)
continue;
res1 = new StringBuilder();
for (byte b : macBytes)
res1.append(String.format("%02X:",b));
if (res1.length() > 0)
res1.deleteCharAt(res1.length() - 1);
catch (Exception ex)
return res1.toString();
【讨论】:
你能解释一下你的代码吗?就像为什么它总是返回随机的“真实”mac地址?如果我们重启手机/恢复出厂设置会改变吗? 你好,它返回真实的mac地址,因为这是我们需要从这个方法中得到的。关于随机化,您知道在android 10+中,如果您在连接wifi时使用随机mac地址,那么您尝试使用任何其他方法获取mac地址来获取mac地址,您将得到随机的而不是真正的一个。而且这种方法永远都是真实的,如果你关闭wifi或重新启动设备或为设备执行恢复出厂设置或固件,它不会改变。 如果我使用 root 手机并欺骗/更改我的 mac 地址怎么办?会返回真实的mac地址吗? 老实说,我没有在有根设备上测试它,如果你有一个测试它并与我们分享结果。【参考方案2】:您可以使用此获取设备的 Android 唯一 ID,为此 您需要获得 android.permission.READ_PHONE_STATE
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
【讨论】:
【参考方案3】:根据我的想法,您应该使用以下代码来获取唯一 ID -
String uniqueID = UUID.randomUUID().toString();
上面的代码不需要用户的任何运行时权限来访问设备ID并始终生成唯一ID。您可以将此唯一ID与用户数据映射或根据需要进行操作。
谢谢
【讨论】:
我不想要随机 id。我想获得唯一的 id,这样我就可以识别出我的 API 来自哪个设备。这样,我就可以管理我的会话了。除了 Secure.android_id 之外,还有另一个唯一的 id 对 android 是唯一的吗?或者是否可以通过任何方式访问 Android 10 中的 Secure.android_id。 嗨那么你是如何解决你的问题来获得永久唯一 ID以上是关于如何在 android 10 中获取唯一的设备 ID?的主要内容,如果未能解决你的问题,请参考以下文章