2011-09-07 7 views

risposta

15

Supponendo che l'interfaccia ethernet sia eth0, provare ad aprire e leggere il file /sys/class/net/eth0/address.

+0

eccellente! Ha funzionato. Pensi che funzioni su qualsiasi dispositivo Android con eth0? – inversus

+0

Dovrebbe, è un percorso del kernel Linux standard che dubito che cambierà presto. Sono contento che ci abbia aiutato. –

25

Questa è la mia soluzione basata sulla risposta di Joel F. Spero che aiuti qualcuno!

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

Controllare anche/sys/class/efuse/mac almeno sulle piattaforme Amlogic.

0

In questo momento (marzo 2014) Google non privides un'API su Ethernet

Questa è la Rason perché non abbiamo un modo per ottenere il mac ethernet come nel caso wifi.

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

Un'alternativa è la lettura del file eth0. Per favore fatemi sapere se qualcuno sa diversamente!

0

questo modo di utilizzare java risolverlo; forse può aiutare 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

Forse la mia risposta sarà utile per alcuni di voi là fuori, e almeno divertente per il resto di voi.

Stavo cercando di ottenere l'indirizzo MAC Ethernet per un dispositivo Android TV, per cercare di trovare il produttore effettivo in cui è registrato l'indirizzo MAC. Mi sono collegato al dispositivo con adb e ho utilizzato l'ottima risposta di Joel F sopra e ha funzionato benissimo.

Quindi ho capovolto la scatola e lì è su un adesivo nella parte inferiore del dispositivo.

Quindi, se non è necessario programmarlo, provare prima a capovolgere il dispositivo. MAC address sticker on bottom of device.

P.S. Ho contattato il produttore per il quale è stato registrato l'indirizzo e mi hanno detto che non creavano questo modello e che altri produttori copiavano i loro indirizzi MAC.