什么是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"; }
|