无法使用 getHardwareAddress() 在 Android 11 及更高版本上检索 MAC 地址

问题描述 投票:0回答:1

我一直在使用以下代码片段在运行 9 和 10 的 Android 设备上成功检索 MAC 地址:但是此功能不适用于 android 11 及更高版本

public String getMacAddressAndroid6Plus() {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            if (!intf.getName().equalsIgnoreCase("wlan0")) {
                continue;
            }
            byte[] mac = intf.getHardwareAddress();
            if (mac == null) {
                Log.e("MACLogs", "MAC address is null");
                return null;
            }
            StringBuilder buf = new StringBuilder();
            for (byte aMac : mac) {
                buf.append(String.format("%02X:", aMac));
            }
            if (buf.length() > 0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            String macAddress = buf.toString();
            Log.d("MACLogs", "MAC address: " + macAddress);
            return macAddress;
        }
    } catch (Exception e) {
        Log.e("MACLogs", "Error getting MAC address: " + e.getMessage());
    }
    return null;
}

但是,我注意到这段代码不再适用于运行 Android 11 及更高版本的设备。有人可以建议一个解决方案来检索这些设备上的 MAC 地址吗?

我希望该函数能够像在运行 Android 9 和 10 的设备上那样检索设备的唯一 MAC 地址。

android-studio mac-address android-11 wifimanager network-interface
1个回答
0
投票

Android 11谷歌不允许访问基于硬件的应用程序唯一ID。

Android 10(API 级别 29)增加了不可重置的限制 标识符,包括 IMEI 和序列号。您的应用必须 是设备或配置文件所有者应用程序,具有特殊的运营商权限,或者 拥有 READ_PRIVILEGED_PHONE_STATE 特权权限,以便 访问这些标识符

所以你不能访问MAC地址。而是考虑使用以下链接中的替代方法。

你可以访问这个链接

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

© www.soinside.com 2019 - 2024. All rights reserved.