AndroidをApiレベル8で使用していて、イーサネットインターフェイスのアドレス(eth0)を取得したい。
APIレベル8では、NetworkInterfaceクラスに関数getHardwareAddress()がありません。これはワイヤレスインターフェイスではないため、WifiManagerも機能しません。
前もって感謝します!
イーサネットインターフェイスがeth0であると仮定して、ファイルを開いて読み取ってみてください/sys/class/net/eth0/address
。
これは、ジョエル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;
}
}
この使用方法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);
少なくともアムロジックプラットフォームでは、/ sys/class/efuse/macも確認してください。
現在(2014年3月)Googleは イーサネット に関するAPIを提供していません
これは、wifiの場合のようにイーサネットマックを入手する方法がないため、理由です。
private String getWifiMACAddress(Context ctx) {
WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
return info.getMacAddress();
}
1つの代替方法は、eth0ファイルを読み取ることです。誰かが他のことを知っているなら私に知らせてください!
たぶん私の答えはそこにいるあなたの何人かにとって役立つでしょう、そして少なくともあなたの残りのために面白いでしょう。
Android TVデバイスのイーサネットMACアドレスを取得しようとして、MACアドレスが登録されている実際のメーカーを見つけようとしました。adbでデバイスに接続し、JoelFのすばらしいものを使用しました。上記の答えとそれはうまくいきました。
それから私は箱をひっくり返しました、そしてそこでそれは装置の底のステッカーにあります。
したがって、プログラムで必要ない場合は、最初にデバイスを裏返してみてください。
P.S.アドレスが登録されているメーカーに連絡したところ、このモデルは製造しておらず、他のメーカーがMACアドレスをコピーしているとのことでした。
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;
}