获取android以太网MAC地址(不是wifi接口)
Posted
技术标签:
【中文标题】获取android以太网MAC地址(不是wifi接口)【英文标题】:Get android Ethernet MAC Address (not wifi interface) 【发布时间】:2011-11-12 01:45:56 【问题描述】:我正在使用 Api 级别 8 的 android,我想获取我的以太网接口 (eth0) 的地址。
在 API 级别 8 上,NetworkInterface 类没有函数 getHardwareAddress()。 WifiManager 也不起作用,因为这不是无线接口。
提前致谢!
【问题讨论】:
【参考方案1】:这是我基于 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;
【讨论】:
【参考方案2】:假设您的以太网接口是 eth0,请尝试打开并读取文件 /sys/class/net/eth0/address
。
【讨论】:
太棒了!它成功了。你认为它适用于任何带有 eth0 的安卓设备吗? 应该,这是一个标准的 Linux 内核路径,我怀疑它们很快就会改变。很高兴它有帮助。【参考方案3】:这种方式用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);
【讨论】:
【参考方案4】:至少在 Amlogic 平台上还要检查 /sys/class/efuse/mac。
【讨论】:
【参考方案5】:也许我的回答会对你们中的一些人有所帮助,至少对你们其他人来说很有趣。
我试图获取 Android TV 设备的以太网 MAC 地址,以尝试找到 MAC 地址注册到的实际制造商。我使用 adb 连接到设备,并使用了上面 Joel F 的出色答案,效果很好。
然后我把盒子翻过来,它在设备底部的贴纸上。
因此,如果您不需要以编程方式使用它,请先尝试翻转设备。
附:我联系了注册地址的制造商,他们说他们不生产这个型号,其他制造商复制他们的 MAC 地址。
【讨论】:
【参考方案6】:现在(2014 年 3 月)Google 没有提供关于 Ethernet 的 API
这是原因,因为我们没有办法像在 wifi 情况下那样获得以太网 mac。
private String getWifiMACAddress(Context ctx)
WifiManager wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiManager.getConnectionInfo();
return info.getMacAddress();
另一种方法是读取 eth0 文件。如果有人知道,请告诉我!
【讨论】:
【参考方案7】: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;
【讨论】:
【参考方案8】:AndroidTV 的许多实现可能会将其填充到属性中,您可以使用 getprop 命令检查以找到正确的属性名称广告,然后使用 SystemProperties.get() 读取它
要在 java 中读取程序中的 MAC,您可以使用以下内容
SystemProperties.get("ro.boot.ethernet-mac");
【讨论】:
以上是关于获取android以太网MAC地址(不是wifi接口)的主要内容,如果未能解决你的问题,请参考以下文章