Android How to - Get Mac address from system file








Question

We would like to know how to get Mac address from system file.

Answer

//w  w  w. j a va2 s .c  om
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Locale;

import android.content.Context;
import android.net.wifi.WifiManager;
import android.text.TextUtils;

class MacAddressUtil {
  public static String getMacAddress(Context context) {
    final String rawAddress = getRawMacAddress(context);
    if (rawAddress == null) {
      return null;
    }
    final String upperAddress = rawAddress.toUpperCase(Locale.US);
    return removeSpaceString(upperAddress);
  }

  private static String getRawMacAddress(Context context) {
    final String wlanAddress = loadAddress("wlan0");
    if (wlanAddress != null) {
      return wlanAddress;
    }

    // emulators should have an ethernet address
    final String ethAddress = loadAddress("eth0");
    if (ethAddress != null) {
      return ethAddress;
    }

    // query the wifi manager (requires the ACCESS_WIFI_STATE permission)
    try {
      final WifiManager wifiManager = (WifiManager) context
          .getSystemService(Context.WIFI_SERVICE);
      final String wifiAddress = wifiManager.getConnectionInfo()
          .getMacAddress();
      if (wifiAddress != null) {
        return wifiAddress;
      }
    } catch (Exception e) {
      /* no-op */
    }

    return null;
  }

  private static String loadAddress(final String interfaceName) {
    try {
      final String filePath = "/sys/class/net/" + interfaceName + "/address";
      final StringBuilder fileData = new StringBuilder(1000);
      final BufferedReader reader = new BufferedReader(
          new FileReader(filePath), 1024);
      final char[] buf = new char[1024];
      int numRead;

      String readData;
      while ((numRead = reader.read(buf)) != -1) {
        readData = String.valueOf(buf, 0, numRead);
        fileData.append(readData);
      }

      reader.close();
      return fileData.toString();
    } catch (IOException e) {
      return null;
    }
  }

  private static String removeSpaceString(final String inputString) {
    if (inputString == null) {
      return null;
    }

    String outputString = inputString.replaceAll("\\s", "");
    if (TextUtils.isEmpty(outputString)) {
      return null;
    }

    return outputString;
  }
}