Android獲取Mac位址 適配所有版本

2021-08-21 07:28:33 字數 3816 閱讀 7137

最近由於專案需要mac位址的記錄,搞了乙個通用的適配類,目前經過測試可以適配android所有版本,我測試過的裝置系統android 4 5 6 7 7+都可以獲取到,廢話不多說直接上**,簡潔:

該類分為三類:android6.0以下、6.0以上7.0以下、7.0以上

首先是獲取mac的整合方法:

public static string getmac(context context)  else if (build.version.sdk_int < build.version_codes.n

&& build.version.sdk_int >= build.version_codes.m) else if (build.version.sdk_int >= build.version_codes.n) else if (!textutils.isempty(getmachinehardwareaddress())) else

}return "02:00:00:00:00:00";

}

6.0以下方法,google提供的公有方法,需要許可權

/**

* 根據wifi資訊獲取本地mac

* * @param context

* @return

*/public static string getlocalmacaddressfromwifiinfo(context context)

android 6.0以後 將不再能通過 wifimanager 獲取mac,獲取到的mac將是固定的:02:00:00:00:00:00

然而我開發的sdk就是通過wifimanager獲取的mac。

android sdk後來做了6.0適配,通過cat /sys/class/net/wlan0/address,可以在6.0上獲取mac位址。

/**

* android 6.0及以上、7.0以下 獲取mac位址

* * @param context

* @return

*/public static string getmacaddress(context context)

}string str = "";

string macserial = "";

try

}} catch (exception ex)

if (macserial == null || "".equals(macserial)) catch (exception e)

}return macserial;

}private static string getmacaddress0(context context) catch (exception e)

}return "";

}/**

* check whether accessing wifi state is permitted

* * @param context

* @return

*/private static boolean isaccesswifistateauthorized(context context) else

return false;

}private static string loadfileasstring(string filename) throws exception

private static string loadreaderasstring(reader reader) throws exception

return builder.tostring();

}

android 7.0 後,通過上述適配的方法,將獲取不到mac位址。

總共分為三種方式:

**如下:

/**

* 根據ip位址獲取mac位址

** @return

*/public static string getmacaddress()

string str = integer.tohexstring(b[i] & 0xff);

}strmacaddr = buffer.tostring().touppercase();

} catch (exception e)

return strmacaddr;

}/**

* 獲取移動裝置本地ip

** @return

*/private static inetaddress getlocalinetaddress()

if (ip != null)

}} catch (socketexception e)

return ip;

}/**

* 獲取本地ip

** @return

*/private static string getlocalipaddress() }}

} catch (socketexception ex)

return null;

}/**

* android 7.0及以上 (2)掃瞄各個網路介面獲取mac位址**/

/*** 獲取裝置hardwareaddress位址

** @return

*/public static string getmachinehardwareaddress() catch (socketexception e)

string hardwareaddress = null;

networkinte***ce if = null;

if (inte***ces == null)

while (inte***ces.hasmoreelements()) catch (socketexception e)

}return hardwareaddress;

}/***

* byte轉為string

** @param bytes

* @return

*/private static string bytestostring(byte bytes)

stringbuilder buf = new stringbuilder();

for (byte b : bytes)

if (buf.length() > 0)

return buf.tostring();

}/** * android 7.0及以上 (3)通過busybox獲取本地儲存的mac位址

* */

/*** 根據busybox獲取本地mac

** @return

*/public static string getlocalmacaddressfrombusybox()

// 對該行資料進行解析

// 例如:eth0 link encap:ethernet hwaddr 00:16:e8:3e:df:67

if (result.length() > 0 && result.contains("hwaddr") == true)

return result;

}private static string callcmd(string cmd, string filter)

result = line;

} catch (exception e)

return result;

}

獲取Android的MAC位址

在android平台上,如果在開始啟動前去載入乙個測試程式,該測試程式的功能是去讀取wifi的mac位址,然後顯示出來,顯示的方式可以使用移植recovery源 的miniui。那麼讀wifi的mac位址無疑便是要初始化,裝載wifi驅動後,通過cat sys class net wlan0 add...

android獲取Mac位址和IP位址

獲取mac位址實際專案中測試了如下幾種方法 1 裝置開通wifi連線,獲取到網絡卡的mac位址 但是不開通wifi,這種方法獲取不到mac位址,這種方法也是網路上使用的最多的方法 根據wifi資訊獲取本地mac public static string getlocalmacaddressfromw...

獲取MAC位址

簡單的辦法是在控制台輸入ping 目標ip,然後用 arp a 來檢視.或者下面的 記下來以備後用 private declare function inet addr function inet addr lib wsock32.dll byval s as string as int32 pri...