【问题标题】:How to get MAC Address of device using Wifi in Android如何在 Android 中使用 Wifi 获取设备的 MAC 地址
【发布时间】:2014-04-23 04:13:44
【问题描述】:

我想使用 Wifi 访问手机的 MAC 地址。但不知何故,我无法做到这一点。 我写了以下代码。

context=this;
        setContentView(R.layout.activity_main);
        try{    
            WifiManager wifi=(WifiManager)this.context.getSystemService(context.WIFI_SERVICE);
            wifi.setWifiEnabled(true);
            WifiInfo info=wifi.getConnectionInfo();
            String address=info.getMacAddress();
            if(address==null){
                Toast.makeText(context, "Null", Toast.LENGTH_LONG).show();
            }
            else{
                new AsyncClass(MainActivity.this,address).execute();
            }
        }catch(Exception e){
            Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
        }

当我在手机上运行它时,它给了我“不幸的是应用程序停止”的错误 当我在模拟器上运行这个程序时,它总是给出地址为空。 请帮我摆脱它。 提前致谢。

我的清单文件如下:

<uses-permission
        android:required="true"
        android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission
        android:required="true"
        android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission
        android:required="true"
        android:name="android.permission.INTERNET"/>

【问题讨论】:

标签: android wifi


【解决方案1】:

请在清单中添加如下权限

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

如下编写函数/方法retrieveMacAddress

public String retrieveMacAddress(Context context) {
    WifiManager wimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    String macAddress = wimanager.getConnectionInfo().getMacAddress();
    if (macAddress == null) {
        macAddress = "Device don't have mac address or wi-fi is disabled";
    }
    return macAddress;
}

【讨论】:

【解决方案2】:

您的代码工作正常,只需删除 asyncTask 行并放入 Toast 消息。然后您的代码将在 device.its 上正常运行。我检查了你的代码。我认为你必须在异步任务中出错。

try {
            WifiManager wifi = (WifiManager) this
                    .getSystemService(this.WIFI_SERVICE);
            wifi.setWifiEnabled(true);
            WifiInfo info = wifi.getConnectionInfo();
            String address = info.getMacAddress();
            if (address == null) {
                Toast.makeText(this, "Null", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, address, Toast.LENGTH_LONG).show();
            }
        } catch (Exception e) {
            Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
        }

【讨论】:

  • 现在我想使用 JSOn 将这个 MAC 地址发送到服务器。所以我必须通过 AsyncTask 发送。那我能做些什么呢?
  • @DhrupadBhatt 从技术上讲,这是一个新问题,并且之前已经在 SO 上回答过一个问题,如果这是您所说的正确答案,(我会验证它是)你需要接受它。甚至原来的问题也是重复的。
  • 等一下,我会给出一种方法。如果这个答案有帮助,请点赞。
  • @DhrupadBhatt chk 我的第二个答案
【解决方案3】:
public void uploadMacAddressTOserver(String address) {
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    CallWebserviceToUploadMacAddress(address);
                } catch (IOException e) {

                }

            }
        }).start();
    }

您可以使用线程并将数据上传到服务器。可能在AsyncTask 有些你必须传递一些错误的参数,所以它会出错。

【讨论】:

  • 好的,我正在尝试这个建议。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2022-06-13
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多