能否以编程方式获取运行 Android 6.0+ 的设备的 MAC 地址?

2024-01-06

能否以编程方式获取运行 Android 6.0+ 的设备的 MAC 地址?

根据this https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id,

为了给用户提供更好的数据保护,从这里开始 发布后,Android 删除了对设备本地的编程访问 使用 Wi-Fi 和蓝牙 API 的应用程序的硬件标识符。这 WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法 现在返回常量值 02:00:00:00:00:00。

这是否意味着在 Android 6.0+ 中无法获取设备的 MAC 地址?如果可以的话,能告诉我如何在Android Studio中实现吗?

Also, 这个答案 https://stackoverflow.com/a/11705949仅适用于Android版本6.0以下的设备


您可以使用替代方法在 Android 6.0 设备上获取 MAC 地址。

首先将互联网用户权限添加到 AndroidManifest.xml 中:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

第二,

try {
        // get all the interfaces
        List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
        //find network interface wlan0  
        for (NetworkInterface networkInterface : all) {
            if (!networkInterface.getName().equalsIgnoreCase("wlan0")) continue;
        //get the hardware address (MAC) of the interface    
            byte[] macBytes = networkInterface.getHardwareAddress();
            if (macBytes == null) {
                return "";
            }


            StringBuilder res1 = new StringBuilder();
            for (byte b : macBytes) {
                //gets the last byte of b
                res1.append(Integer.toHexString(b & 0xFF) + ":");
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString();
        }
    } catch (Exception ex) {
           ex.printStackTrace();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

能否以编程方式获取运行 Android 6.0+ 的设备的 MAC 地址? 的相关文章

随机推荐