Android 手机获取Mac地址的几种方法

来源:互联网 发布:mac 安装 ipython3 编辑:程序博客网 时间:2024/05/01 06:24

最常用的方法,通过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;elseip = 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及其以下版本都可以获取到。