Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法

时间:2021-02-04 12:48:47

参考:http://blog.csdn.net/jia635/article/details/51899919 


之前使用的方法如下:


// Android 6.0之前的版本可以用的方法(模拟器可以使用)
private String getMacAddrOld()
{
String macString = "";
WifiManager wifimsg = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if (wifimsg != null)
{
if (wifimsg.getConnectionInfo() != null)
{
if (wifimsg.getConnectionInfo().getMacAddress() != null)
{
macString = wifimsg.getConnectionInfo().getMacAddress();
}
}
}
return macString;
}

使用这个方法,在模拟器上是可以正常获取wifi mac地址,但是在Android 6.0系统上,获取的就有问题,返回的是“02:00:00:00:00:00”



谷歌搜到了如下的方法,可以获取Android6.0系统的wifi Mac 地址。

但是这个方法,却获取不到模拟器的地址,或者是获取到的和上面的方法不同,而且不准确。

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

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

StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
res1.append(String.format("%02X:",b));
}

if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
}
return "02:00:00:00:00:00";
}


最后,是先使用旧的方法获取,如果获取到的是“02:00:00:00:00:00”,那么就调用下面的新方法。

public String getDeviceMacAddress()
{
String addr = getMacAddrOld();
if(addr.equals("02:00:00:00:00:00"))
{
addr = SystemInfo.getMacAddr();
}
return addr;
}