[英]How to obtain MAC address of WiFi network interface?
看來android的java.net.NetworkInterface實現沒有
byte[] getHardwareAddress() 方法http://developer.android.com/reference/java/net/NetworkInterface.html
我發現有幾個論壇的人試圖這樣做但沒有明確的答案,我需要獲得一個有點跨設備的 UUID,所以我不能依賴電話號碼或 ANDROID_ID(可以被覆蓋,我認為這取決於在擁有谷歌帳戶的用戶上) http://developer.android.com/reference/android/provider/Settings.Secure.html#ANDROID_ID
在 linux 中,您可以使用 ifconfig 或從 /proc/net/arp 讀取,您可以輕松獲取硬件地址。
android中是否有我可以讀取的文件?
必須有一種方法來獲取此地址,因為它顯示在手機的“設置 > 關於手機 > 狀態”中。
遲到的答案,但它可以幫助其他有同樣“問題”的人。
答案非常直接:
WifiManager wifiMan = (WifiManager) this.getSystemService(
Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
上面的代碼會得到你設備的MAC地址,抓取地址時記得開啟wifi。 此代碼段應在您的活動中使用。
必須有一種方法來獲取此地址,因為它顯示在手機的“設置 > 關於手機 > 狀態”中。
這意味着,如果不出意外的話,您可以在 Android 開源代碼周圍進行推敲,也許使用 Google 代碼搜索,以找出它從哪里提取。
做了一些閑逛自己的,這將是使用出現getMacAddress()
從WifiInfo
。
更新:
從Android 6.0開始,上述 API 將為您提供所有設備的恆定 MAC 地址,即02:00:00:00:00:00 。 詳情請參考以下
http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
發現另一篇聲稱在 6.0 中找到 MAC 地址的帖子,但未對其進行測試
如何在 Android Marshmallow 中獲取 Wi-Fi Mac 地址
在 Android Q 上,無法再訪問 mac 地址。
WifiInfo.getMacAddress()
將始終返回02:00:00:00:00:00
。
並且WifiConfiguration.getRandomizedMacAddress()
將不再可用。
添加以下權限。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
WifiManager 在 onCreate 中初始化。
WifiManager wifiMgr = (WifiManager) getContext().getSystemService(context.WIFI_SERVICE);
使用以下功能。
public void WI-FI_MAC() {
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
String macAddress = wifiInfo.getMacAddress();
}
這是我的代碼,在 android 5 + 中運行良好。
public static String getMacAddress() {
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 "";
}
StringBuilder res1 = new StringBuilder();
for (byte b : macBytes) {
// res1.append(Integer.toHexString(b & 0xFF) + ":");
res1.append(String.format("%02X:",b));
}
if (res1.length() > 0) {
res1.deleteCharAt(res1.length() - 1);
}
return res1.toString();
}
} catch (Exception ex) {
//handle exception
}
return "";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.