首页 > 系统 > Android > 正文

Android M以及以上获取mac

2019-11-09 15:51:22
字体:
来源:转载
供稿:网友

android6.0的时候使用如下方法可以获取到mac:

String str = ""; String macSerial = ""; try { PRocess pp = Runtime.getRuntime().exec( "cat /sys/class/net/wlan0/address "); InputStreamReader ir = new InputStreamReader(pp.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (; null != str; ) { str = input.readLine(); if (str != null) { macSerial = str.trim();// 去空格 break; } } } catch (Exception ex) { ex.printStackTrace(); } Trace.d(LOG_TAG, "getMac():: macSerial = " + macSerial); if (macSerial == null || "".equals(macSerial)) { try { return loadFileAsString("/sys/class/net/eth0/address") .toUpperCase().substring(0, 17); } catch (Exception e) { e.printStackTrace(); } }private String loadFileAsString(String fileName) throws Exception { FileReader reader = new FileReader(fileName); String text = loadReaderAsString(reader); reader.close(); return text; }

但是客户反馈7.0用这个方法获取不到mac,经高人指点,得到方法:

//针对android7.0获取mac if (TextUtils.isEmpty(macSerial)) { try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface iF = interfaces.nextElement(); byte[] addr = iF.getHardwareAddress(); if (addr == null || addr.length == 0) { continue; } StringBuilder buf = new StringBuilder(); for (byte b : addr) { buf.append(String.format("%02X:", b)); } if (buf.length() > 0) { buf.deleteCharAt(buf.length() - 1); } String mac = buf.toString(); Trace.d(LOG_TAG, "interfaceName=" + iF.getName() + ", mac=" + mac); if (iF.getName().equalsIgnoreCase("wlan0")) { macSerial=mac; break; } } } catch (Exception e) { Log.d(LOG_TAG, "SocketException e=" + e.getMessage()); e.printStackTrace(); } }

参考资料:https://yrom.net/blog/2015/10/28/android-m-getting-wifi-macaddress-1/


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表