如何在Android中使用Wifi获取设备的MAC地址

时间:2014-04-23 04:13:45

标签: android wifi

我想使用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();
        }

当我在手机上运行时,它会给我一个错误"不幸的是应用已停止" 当我在Imulator上运行这个程序时,它总是给出地址是空的。 请帮我摆脱它。 提前谢谢。

我的清单文件如下:

<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"/>

3 个答案:

答案 0 :(得分:1)

请在清单中添加权限,如下所示

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

编写一个函数/方法检索Mac地址,如下所示

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;
}

答案 1 :(得分:0)

您的代码工作正常,只需删除asyncTask Line并输入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();
        }

答案 2 :(得分:0)

public void uploadMacAddressTOserver(String address) {
        new Thread(new Runnable() {

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

                }

            }
        }).start();
    }

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