如何从安装了Android 11的Android设备获取MAC地址?

tpxzln5u  于 2023-05-21  发布在  Android
关注(0)|答案(3)|浏览(692)

我们正在使用NetworkInterface.getHardwareAddress()来获取MAC地址,但正如我们从 * Android 11中的MAC地址可用性更改 * 中所看到的,现在它将不会用于Android 11
是否有解决方案或任何指导方针?

bf1o4zei

bf1o4zei1#

Android指南强制停止使用MAC地址作为标识。正如你发布的链接,还有其他替代品。如果你想在Android 11中使用MAC地址,几乎不可能获得相同的MAC地址,即使使用hafiza的代码(你忘了告诉有一些额外的清单权限)。
在我的应用程序中,我使用MAC地址验证直到Android 9.0(Pie),但现在我使用库 FingerprintJS Android,这是一个非常有用的解决方案来获取某种ID。我已经在Android 9.0,Android 10和Android 11上进行了测试,没有任何真实的问题或随机值。

rbpvctlc

rbpvctlc2#

在我的Android项目中,我使用以下代码来获取适用于所有Android版本的MAC地址。
但现在已经没有了...所以现在我们无法获得MAC地址。请参阅 * 不使用MAC地址 *。
我们使用的获取MAC地址的旧方法:

public static String getMacAddress() {
    try {
        List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface networkInterface : all) {
            if (!networkInterface.getName().equalsIgnoreCase("wlan0"))
                continue;

            byte[] macBytes = networkInterface.getHardwareAddress();
            if (macBytes == null) {
                return "";
            }

            StringBuilder res1 = new StringBuilder();
            Log.e("Get MAC address", "getMacAddr: " + res1.toString());
            for (byte b : macBytes) {
                // res1.append(Integer.toHexString(b & 0xFF) + ":");
                res1.append(String.format("%02X:", b));
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString().replace(":", "-");
        }
    } catch (Exception ex) {
        Log.e("TAG", "getMacAddr: ", ex);
    }
    return "";
}
yzuktlbb

yzuktlbb3#

通过此代码,我可以在Android 11中获取MAC地址。

fun getEthMac(): String {
    var macAddress = "Not able to read the MAC address"
    var br: BufferedReader? = null
    try {
        br = BufferedReader(FileReader("/sys/class/net/eth0/address"))
        macAddress = br.readLine().uppercase()
    } catch (e: IOException) {
        e.printStackTrace()
    } finally {
        if (br != null) {
            try {
                br.close()
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    }
    return macAddress
}

需要注意的是,此文件位置可能因不同设备和不同Android版本而异。因此,在不同设备和不同Android版本上测试此功能非常重要,以确保文件可访问,并且MAC地址可以正确读取。

相关问题