首页 > 系统 > Android > 正文

安卓获取MAC地址,适配Android 6.0

2019-11-08 00:05:18
字体:
来源:转载
供稿:网友

用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 ""; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表