可以通过编程方式获取运行Android 6.0+的设备的MAC地址吗?

Dak*_*ake 4 android mac-address

可以通过编程方式获取运行Android 6.0+的设备的MAC地址吗?

根据,

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

这是否意味着在Android 6.0+中获取设备的MAC地址是不可能的?如果有可能,您能告诉我如何在Android Studio中执行此操作吗?

此外,此答案仅适用于Android版本低于6.0的设备

GAV*_*AVD 8

您可以使用另一种方法在Android 6.0设备上获取MAC地址.

首先将Internet用户权限添加到AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

其次,

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();
    }
Run Code Online (Sandbox Code Playgroud)