簡體   English   中英

如何獲取WiFi網絡接口的MAC地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM