1. 程式人生 > >安卓獲取MAC地址,適配Android 6.0

安卓獲取MAC地址,適配Android 6.0

用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 ""; }