Android 獲取Mac地址,相容6.0以下和6.0以上
阿新 • • 發佈:2018-11-20
import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.text.TextUtils; import java.io.FileReader; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.io.Reader; import java.net.NetworkInterface; import java.net.SocketException; /** * @param * @Comments : 獲取Mac地址 * @Author : Lampo * @CreateDate : 2018/11/9 17:49 * @ModifiedBy : Lampo * @ModifiedDate : 2018/11/9 17:49 * @Modified : */ public class MacUtil { public static String getMac(Context context) { String strMac = null; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { // 6.0以下 strMac = getLocalMacAddressFromWifiInfo(context); return strMac; } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //6.0以上7.0以下 if (PermissionsUtil.getInstance().RPWaireAndRead()) { strMac = getMacAddress(context); } return strMac; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (PermissionsUtil.getInstance().RPWaireAndRead()) { //7.0以上 if (!TextUtils.isEmpty(getMacAddress(context))) { //7.0以上1 strMac = getMacAddress(context); return strMac; } else if (!TextUtils.isEmpty(getMachineHardwareAddress())) { //7.0以上2 strMac = getMachineHardwareAddress(); return strMac; } } } return "02:00:00:00:00:00"; } /** * 根據wifi資訊獲取本地mac * * @param context * @return */ private static String getLocalMacAddressFromWifiInfo(Context context) { WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo winfo = wifi.getConnectionInfo(); String mac = winfo.getMacAddress(); return mac; } /** * android 6.0及以上、7.0以下 獲取mac地址 * * @param context * @return */ private static String getMacAddress(Context context) { // 如果是6.0以下,直接通過wifimanager獲取 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { String macAddress0 = getMacAddress0(context); if (!TextUtils.isEmpty(macAddress0)) { return macAddress0; } } 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) { } if (macSerial == null || "".equals(macSerial)) { try { return loadFileAsString("/sys/class/net/eth0/address") .toUpperCase().substring(0, 17); } catch (Exception e) { e.printStackTrace(); } } return macSerial; } private static String getMacAddress0(Context context) { if (PermissionsUtil.getInstance().RPwifi()) { WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = null; try { wifiInfo = wifiMgr.getConnectionInfo(); return wifiInfo.getMacAddress(); } catch (Exception e) { } } return ""; } private static String loadFileAsString(String fileName) throws Exception { FileReader reader = new FileReader(fileName); String text = loadReaderAsString(reader); reader.close(); return text; } private static String loadReaderAsString(Reader reader) throws Exception { StringBuilder builder = new StringBuilder(); char[] buffer = new char[4096]; int readLength = reader.read(buffer); while (readLength >= 0) { builder.append(buffer, 0, readLength); readLength = reader.read(buffer); } return builder.toString(); } /** * android 7.0及以上 (2)掃描各個網路介面獲取mac地址 */ private static String getMachineHardwareAddress() { String macAddress = null; StringBuffer buf = new StringBuffer(); NetworkInterface networkInterface = null; try { networkInterface = NetworkInterface.getByName("eth1"); if (networkInterface == null) { networkInterface = NetworkInterface.getByName("wlan0"); } if (networkInterface == null) { return "02:00:00:00:00:00"; } byte[] addr = networkInterface.getHardwareAddress(); for (byte b : addr) { buf.append(String.format("%02X:", b)); } if (buf.length() > 0) { buf.deleteCharAt(buf.length() - 1); } macAddress = buf.toString(); } catch (SocketException e) { e.printStackTrace(); return "02:00:00:00:00:00"; } return macAddress; } }