什么是mac地址?

mac地址全称 media access control address,直译为:媒体访问控制地址,它是网卡的唯一标识,网络传输中通过它来确定网卡在网络的具体位置,从而发送和接受数据。是不是和IP的作用很像?区别可以看这里mac地址和ip的区别

获取mac做什么

因为mac地址的唯一性,现在智能设备都有无线局域网功能(无线网卡)并且不易更改,所以经常通过mac地址来确定设备的唯一性,用于数据统计。

Android获取mac地址的方法

Android 6.0以下的系统

必需权限

1
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

方法

1
2
3
4
public static String getMacAddress(Context context) {
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
return wifiManager.getConnectionInfo().getMacAddress();
}

Android 6.0及以上的系统

Android 6.0中加强了隐私的管理,用上面的方法获取mac地址会返回 02:00:00:00:00
我们可以获取设备的所有的网络接口,然后找到wifi接口,获取它的硬件地址,即mac地址
必需权限

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

方法
注意:模拟器上使用该方法获取不到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static String getMacAddress() {
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 e) {
e.printStackTrace();
}
return "can not get";
}