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

3

我想在我的应用程序中获取唯一的设备ID。但根据Google文档所述,Android 10为不可重置的标识符添加了限制。

我不想要随机的ID。我想获取唯一的ID,这样我就可以识别出调用我的API的设备,并通过这样管理我的会话。是否有其他 Android 上的唯一ID,除了Secure.android_id之外?或者有没有办法在Android 10中访问Secure.android_id。


1
您可以从以下链接阅读有关您的选项并据此决定: https://developer.android.com/training/articles/user-data-ids - Dogu Deniz Ugur
3个回答

3
使用以下代码,您将获取wifi mac地址(对于一些设备如小米手机,这将返回wifi-direct mac地址),无论您在连接wifi时是否使用了随机地址,以及wifi是否已打开或关闭。
我使用了下面链接中的方法,并进行了小修改以获取确切的地址而不是随机的地址: 在Android 6.0中获取MAC地址
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地址而不是随机化的?如果我们重新启动手机/恢复出厂设置,它会改变吗? - Hiraeths
你好,这个方法返回真实的MAC地址,因为这是我们需要的。 关于随机化,你知道在Android 10+中,如果你在连接WiFi时使用了随机化的MAC地址,然后尝试使用其他方法获取MAC地址,你将得到随机化的MAC地址而不是真实的MAC地址。 而这个方法总是获取真实的MAC地址,即使你关闭了WiFi或重新启动设备或对设备进行了恢复出厂设置或固件更新。 - Abdallah AlTaher
如果我使用rooted手机并欺骗/更改我的MAC地址,会返回真实的MAC地址吗? - Hiraeths
老实说,我没有在已经root的设备上测试过它,如果你有这样的设备,请测试并与我们分享结果。 - Abdallah AlTaher

2

您可以使用以下方式获取设备的Android唯一标识符,但需要获取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。您可以将此唯一标识符映射到用户数据或根据需要进行操作。

谢谢


2
我不想要随机ID。我想获取唯一的ID,以便可以识别调用我的API的设备,并通过此方式管理我的会话。除了Secure.android_id之外,是否还有其他唯一的ID适用于Android?或者在Android 10中是否有访问Secure.android_id的方法? - Ankur Shinde
3
嗨,你是怎么解决获取永久唯一ID的问题的? - rohit garg
我直接从服务器添加了会话ID。由于最新的设备没有提供ID。 - Ankur Shinde

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