2011-09-07 22 views
12

Estoy usando Android con Api nivel 8 y quiero obtener la dirección de mi interfaz Ethernet (eth0).Obtener dirección MAC de Android (no interfaz wifi)

En el nivel 8 de API, la clase NetworkInterface no tiene la función getHardwareAddress(). WifiManager tampoco funciona, ya que no es una interfaz inalámbrica.

¡Gracias de antemano!

Respuesta

15

Suponiendo que su interfaz de ethernet es eth0, intente abrir y leer el archivo /sys/class/net/eth0/address.

+0

¡excelente! Funcionó. ¿Crees que funciona en cualquier dispositivo Android con eth0? – inversus

+0

Debería, esa es una ruta de kernel de Linux estándar que dudo que cambien pronto. Me alegro de que haya ayudado. –

25

Esta es mi solución basada en la respuesta de Joel F. Espero que ayude a alguien!

/* 
* Load file content to String 
*/ 
public static String loadFileAsString(String filePath) throws java.io.IOException{ 
    StringBuffer fileData = new StringBuffer(1000); 
    BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
    char[] buf = new char[1024]; 
    int numRead=0; 
    while((numRead=reader.read(buf)) != -1){ 
     String readData = String.valueOf(buf, 0, numRead); 
     fileData.append(readData); 
    } 
    reader.close(); 
    return fileData.toString(); 
} 

/* 
* Get the STB MacAddress 
*/ 
public String getMacAddress(){ 
    try { 
     return loadFileAsString("/sys/class/net/eth0/address") 
      .toUpperCase().substring(0, 17); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
1

Compruebe también/sys/class/efuse/mac al menos en las plataformas de Amlogic.

0

En este momento (marzo de 2014) Google no privides una API sobre Ethernet

Esta es la rason porque no tenemos una manera de conseguir el mac de Ethernet como en el caso de wifi.

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

Una alternativa es leer el archivo eth0. Por favor, avíseme si alguien sabe lo contrario!

0

esta forma de usar java fix it; tal vez le puede ayudar a

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

Tal vez mi respuesta va a ser útil para algunos de ustedes por ahí, y al menos divertida para el resto de ustedes.

Estaba tratando de obtener la dirección MAC de ethernet para un dispositivo Android TV, para tratar de encontrar el fabricante real en el que está registrada la dirección MAC. Me conecté al dispositivo con adb y usé la gran respuesta anterior de Joel F y funcionó muy bien.

Luego volteé la caja y allí está en una pegatina en la parte inferior del dispositivo.

Así que si no lo necesita programáticamente, intente voltear el dispositivo primero. MAC address sticker on bottom of device.

P.S. Me puse en contacto con el fabricante en el que está registrada la dirección, y me dijeron que no hacen este modelo y que otros fabricantes copian sus direcciones MAC.

Cuestiones relacionadas