我使用的是具有Api級別8的Android,我想獲取我的以太網接口(eth0)的地址。獲取android以太網MAC地址(不是wifi接口)
在API級別8上,NetworkInterface類沒有函數getHardwareAddress()。 WifiManager也不起作用,因爲這不是無線接口。
在此先感謝!
我使用的是具有Api級別8的Android,我想獲取我的以太網接口(eth0)的地址。獲取android以太網MAC地址(不是wifi接口)
在API級別8上,NetworkInterface類沒有函數getHardwareAddress()。 WifiManager也不起作用,因爲這不是無線接口。
在此先感謝!
假設您的以太網接口是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;
}
}
至少在Amlogic平臺上檢查/ sys/class/efuse/mac。
現在(2014年3月),谷歌不privides的API約Ethernet
這是因爲羅先我們沒有辦法讓以太網MAC像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);
非常好!它的工作。你認爲它可以在任何安裝了eth0的android設備上工作嗎? – inversus
它應該是一個標準的Linux內核路徑,我懷疑它們很快就會改變。很高興幫助。 –