Get android Ethernet MAC Address (not wifi interface)

后端 未结 8 1753
南旧
南旧 2021-02-05 12:12

I\'m using Android with Api level 8 and I want to get the Address of my Ethernet interface (eth0).

On API level 8, the NetworkInterface class don\'t have the function ge

相关标签:
8条回答
  • 2021-02-05 12:29

    Right now (March 2014) Google doesn't privides an API about Ethernet

    This is the rason because we don't have a way to get the ethernet mac like in wifi case.

    private String getWifiMACAddress(Context ctx) {
        WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifiManager.getConnectionInfo();
       return info.getMacAddress();
    }
    

    One alternative is reading the eth0 file. Please let me know if anyone knows otherwise!

    0 讨论(0)
  • 2021-02-05 12:30

    this way to use java fix it; maybe can help you

    NetworkInterface netf = NetworkInterface.getByName("eth0");
    byte[] array = netf.getHardwareAddress();
    StringBuilder stringBuilder = new StringBuilder("");
    String str = "";
    for (int i = 0; i < array.length; i++) {
        int v = array[i] & 0xFF;
        String hv = Integer.toHexString(v).toUpperCase();
        if (hv.length() < 2) {
            stringBuilder.append(0);
        }
        stringBuilder.append(hv).append("-");                   
    }
    str = stringBuilder.substring(0, stringBuilder.length()- 1);
    
    0 讨论(0)
  • 2021-02-05 12:33
    public static String getEthernetMacAddress() {
        String macAddress = "Not able to read";
        try {
            List<NetworkInterface> allNetworkInterfaces = Collections.list(NetworkInterface
                    .getNetworkInterfaces());
            for (NetworkInterface nif : allNetworkInterfaces) {
                if (!nif.getName().equalsIgnoreCase("eth0")) 
                    continue;
    
                byte[] macBytes = nif.getHardwareAddress();
                if (macBytes == null) {
                    return macAddress;
                }
    
                StringBuilder res1 = new StringBuilder();
                for (byte b : macBytes) {
                    res1.append(String.format("%02X:", b));
                }
    
                if (res1.length() > 0) {
                    res1.deleteCharAt(res1.length() - 1);
                }
                macAddress = res1.toString();
            }
        } catch (Exception ex) {
            log(LogLevel.ERROR, "getEthernetMacAddress e :" + ex.getMessage());
            ex.printStackTrace();
        }
        return macAddress;
    }
    
    0 讨论(0)
  • 2021-02-05 12:34

    Assuming your ethernet interface is eth0, try opening and reading the file /sys/class/net/eth0/address.

    0 讨论(0)
  • 2021-02-05 12:34

    Maybe my answer will be helpful to a few of you out there, and at least funny for the rest of you.

    I was trying to get the ethernet MAC address for an Android TV device, to try to find the actual manufacturer the MAC address is registered to. I connected to the device with adb and used Joel F's great answer above and it worked great.

    Then I flipped the box over and there it is on a sticker on the bottom of the device.

    So if you don't need it programatically, try flipping the device over first.

    P.S. I contacted the manufacturer the address is registered to, and they said they don't make this model and that other manufacturers copy their MAC addresses.

    0 讨论(0)
  • 2021-02-05 12:35

    Check also /sys/class/efuse/mac at least on Amlogic platforms.

    0 讨论(0)
提交回复
热议问题