安卓獲取MAC地址,適配Android 6.0
阿新 • • 發佈:2019-02-10
用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 "";
}