【问题标题】:How can I get unique device id in android 10?如何在 android 10 中获取唯一的设备 ID?
【发布时间】:2020-06-15 11:36:06
【问题描述】:

我想在我的应用程序中获得一个唯一的设备 ID。但根据谷歌文档,Android 10 增加了对不可重置标识符的限制。

我不想要随机 ID。我想获得唯一的 id,这样我就可以识别出我的 API 来自哪个设备。这样,我就可以管理我的会话了。除了 Secure.android_id 之外,还有另一个唯一的 id 对 android 是唯一的吗?或者有什么方法可以访问 Android 10 中的 Secure.android_id。

【问题讨论】:

标签: android android-10.0 unique-id


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2017-01-08
    • 2014-11-13
    • 2017-03-16
    相关资源
    最近更新 更多