Ответ 1
Предполагая, что ваш интерфейс ethernet - eth0, попробуйте открыть и прочитать файл /sys/class/net/eth0/address
.
Я использую Android с уровнем Api 8, и я хочу получить адрес моего интерфейса Ethernet (eth0).
На уровне API 8 класс NetworkInterface не имеет функции getHardwareAddress(). WifiManager также не работает, поскольку это не беспроводной интерфейс.
Спасибо заранее!
Предполагая, что ваш интерфейс ethernet - eth0, попробуйте открыть и прочитать файл /sys/class/net/eth0/address
.
Это мое решение, основанное на ответе Joel F. Надеюсь, это поможет кому-то!
/*
* 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;
}
}
Проверьте также /sys/class/efuse/mac хотя бы на платформах Amlogic.
Сейчас (март 2014 года) Google не причисляет API к Ethernet
Это rason, потому что у нас нет способа получить mac ethernet как в случае wifi.
private String getWifiMACAddress(Context ctx) {
WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
return info.getMacAddress();
}
Один из альтернатив - чтение файла eth0. Пожалуйста, дайте мне знать, если кто-то знает об этом!
этот способ использовать java исправить его; может помочь вам
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);
Возможно, мой ответ будет полезен некоторым из вас там, и, по крайней мере, забавный для всех вас.
Я пытался получить MAC-адрес Ethernet для устройства Android TV, чтобы попытаться найти фактического производителя, на который зарегистрирован MAC-адрес. Я подключился к устройству с помощью adb и использовал отличный ответ Joel F выше, и он отлично работал.
Затем я перевернул коробку и там наклейка на нижней части устройства.
Итак, если вы не нуждаетесь в нем программно, попробуйте сначала перенести устройство.
P.S. Я связался с производителем, на который зарегистрирован адрес, и они сказали, что они не делают эту модель и что другие производители копируют свои MAC-адреса.