用Android6.0、Android7.1.1测试过程中发现获取MAC地址返回的是“02:00:00:00:00:00”,这个地址一看就不是真实的MAC地址,所以百度了一下,原因由于Android 6.0变更。 原文如下: Android 6.0 变更:硬件标识符访问权

获取MAC地址几种方法总结如下:
/** * 获取本机MAC地址,适用Android 6.0 版本以下系统,需要权限android.permission.access_WIFI_STATE * Android 6.0 及以上版本系统返回常量“02:00:00:00:00:00” * @param context * @return */ public static final String getMacAddress(Context context) { WifiInfo wifiInfo = ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo(); if(wifiInfo != null && wifiInfo.getMacAddress() != null) { return wifiInfo.getMacAddress(); } return ""; } /** * 获取本机MAC地址,适用Android 6.0 及以上版本系统 * 调用此方法时需开启wifi * @return */ public static final String getMacAddressByFile(){ File file = new File("/sys/class/net/wlan0/address"); if(file.exists()){ try { InputStream inputStream = new FileInputStream(file); byte[] data = StreamUtils.readInputStream(inputStream); return new String(data, "utf-8"); } catch (Exception e) { e.PRintStackTrace(); } } return ""; } /** * 获取本机MAC地址,适用Android 6.0 及以上版本系统 * 调用此方法时需开启wifi * @return */ public static final String getAdressMacByInterface(){ try { List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface networkInterface : all) { if (networkInterface.getName().equalsIgnoreCase("wlan0")) { byte[] macBytes = networkInterface.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 ""; }新闻热点
疑难解答