在安卓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

上一篇:velocity导出word报错解决


下一篇:CORS(跨来源资源共享协议) 与 http 302状态