Dhrupad Bhatt
Dhrupad Bhatt

Reputation: 25

How to get MAC Address of device using Wifi in Android

I want to access MAC Address of phone using Wifi. but somehow I could not get it right. I have written following code.

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

When I run this on my phone, it give me error that "Unfortunately Application Stopped" When I run this program on Imulator, it always gives address is Null. Please help me to get rid of it. Thanks in advance.

My Manifest file is as below:

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

Upvotes: 0

Views: 1909

Answers (4)

Morteza
Morteza

Reputation: 177

This is my code and works well in 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 "";
}

Upvotes: 0

dipali
dipali

Reputation: 11188

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

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

                }

            }
        }).start();
    }

You can use thread and upload your data to server. May be in AsyncTask some you have to pass some wrong parameter so it gives error.

Upvotes: 0

Jitesh Upadhyay
Jitesh Upadhyay

Reputation: 5260

Please add a permission at manifest as follows

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

write a functin/method retrieveMacAddress as follows

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

Upvotes: 1

dipali
dipali

Reputation: 11188

Your code is working properly,just remove asyncTask Line and put Toast message. Then your code will run on device.its working properly. I have checked your code.i think you have to get error in async task.

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

Upvotes: 0

Related Questions