在安卓6.0(及以上)设备上无法获取无线网卡MAC地址的解决方案

Posted 布伊什

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在安卓6.0(及以上)设备上无法获取无线网卡MAC地址的解决方案相关的知识,希望对你有一定的参考价值。

在安卓6.0以下的设备上,通过WifiManager.getConnectionInfo().getMacAddress()即可获取WLAN物理地址,

而在6.0及以上,以此方式获取到的MAC地址为固定值02:00:00:00:00:00,而非真实值

解决方案

WlanMacAddressGetter.java

package com.example.buyishi.myapplication;

import android.util.Log;

import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;

public class WlanMacAddressGetter {
    private static final String TAG = WlanMacAddressGetter.class.getName();

    public static String getWlanMacAddress() {
        try {
            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
            while (networkInterfaces.hasMoreElements()) {
                NetworkInterface networkInterface = networkInterfaces.nextElement();
                if (networkInterface.getName().equals("wlan0")) {
                    StringBuilder mac = new StringBuilder();
                    byte[] hardwareAddress = networkInterface.getHardwareAddress();
                    String hex = Integer.toHexString(hardwareAddress[0] & 0xff);
                    if (hex.length() == 1) {
                        mac.append(‘0‘);
                    }
                    mac.append(hex);
                    for (int i = 1; i < hardwareAddress.length; ++i) {
                        mac.append(‘:‘);
                        hex = Integer.toHexString(hardwareAddress[i] & 0xff);
                        if (hex.length() == 1) {
                            mac.append(‘0‘);
                        }
                        mac.append(hex);
                    }
                    return mac.toString();
                }
            }
        } catch (SocketException ex) {
            Log.e(TAG, null, ex);
        }
        return null;
    }
}

注意:须声明权限android.permission.INTERNET,否则在获取MAC时会引发SocketException

 

以上是关于在安卓6.0(及以上)设备上无法获取无线网卡MAC地址的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

安卓6.0及以上权限处理

PopupWindow在安卓7.0及7.1系统上位置显示异常

PopupWindow在安卓7.0及7.1系统上位置显示异常

在 Android 6.0 中获取 MAC 地址

在Android 6.0 设备上动态获取权限

iscroll在安卓高版本(6.0以上)某些机型上滑动卡顿问题的解决方法