最常用的方法,通过WiFiManager获取:
/** * 通过WiFiManager获取mac地址 * @param context * @return */ private static String tryGetWifiMac(Context context) { WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wi = wm.getConnectionInfo(); if (wi == null || wi.getMacAddress() == null) { return null; } if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) { return null; } else { return wi.getMacAddress().trim(); } }
这个方法Android 7.0是获取不到的,返回的是null,其实是返回“02:00:00:00:00:00”
根据本地IP获取:
/** * 根据IP地址获取MAC地址 * * @return */ private static String getLocalMacAddressFromIp() { String strMacAddr = null; try { //获得IpD地址 InetAddress ip = getLocalInetAddress(); byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < b.length; i++) { if (i != 0) { buffer.append(':'); } String str = Integer.toHexString(b[i] & 0xFF); buffer.append(str.length() == 1 ? 0 + str : str); } strMacAddr = buffer.toString().toUpperCase(); } catch (Exception e) { } return strMacAddr; } /** * 获取移动设备本地IP * * @return */ private static InetAddress getLocalInetAddress() { InetAddress ip = null; try { //列举 Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces(); while (en_netInterface.hasMoreElements()) {//是否还有元素 NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素 Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一个ip地址的列举 while (en_ip.hasMoreElements()) { ip = en_ip.nextElement(); if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) break; else ip = null; } if (ip != null) { break; } } } catch (SocketException e) { e.printStackTrace(); } return ip; }
这个方法Android 7.0及其以下版本都可以获取到。
根据网络接口获取:
/** * 通过网络接口取 * @return */ private static String getNewMac() { 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 null; } 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 ex) { ex.printStackTrace(); } return null; }
注意网络接口的Name有跟多:dummy0、p2p0、wlan0....其中wlan0就是我们需要WiFi mac地址。这个方法Android 7.0及其以下版本都可以获取到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。