如何获取WiFi网络接口的MAC地址?

时间:2010-04-08 15:21:10

标签: java android linux macos networking

似乎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中是否有可以阅读的文件?

必须有一种获取此地址的方法,因为它显示在手机的“设置>关于手机>状态”中。

6 个答案:

答案 0 :(得分:93)

迟到的答案,但它可以帮助其他人有同样的“问题”。

answer非常直接:

WifiManager wifiMan = (WifiManager) this.getSystemService(
                Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();

以上代码将为您提供设备的MAC地址,记住在抓取地址时启用wifi。此代码段应在您的活动中使用。

答案 1 :(得分:22)

  

必须有办法解决这个问题   地址,因为它显示在   “设置>关于手机>状态”   电话。

这意味着,如果不出意外,您可以围绕Android开源代码推特,也许可以使用谷歌代码搜索,找出它从中获取的位置。

我自己做了一些轻击,看来它正在使用getMacAddress()中的WifiInfo

答案 2 :(得分:6)

更新:

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地址但未经过How to get Wi-Fi Mac address in Android Marshmallow

测试的帖子

答案 3 :(得分:0)

添加以下权限。

let center = CGPoint(x: profileImage.bounds.midX, y: profileImage.bounds.midY)

WifiManager在onCreate中初始化。

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

使用以下功能。

 WifiManager wifiMgr = (WifiManager) getContext().getSystemService(context.WIFI_SERVICE);

答案 4 :(得分:0)

在Android Q上,无法再访问mac地址。

WifiInfo.getMacAddress()将始终返回02:00:00:00:00:00

并且WifiConfiguration.getRandomizedMacAddress()将不再可用。

答案 5 :(得分:0)

这是我的代码,在 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 "";
}