Android TV开发中有的机器会接有线网,需要获取Mac地址,下面是我测试的两种Mac地址的获取方式。
1.一共两个方法,目前第二个方法获取的不准,最后一位数取的不对。
private String getMacAddress(){
String strMacAddr = null;
try {
InetAddress ip = getLocalInetAddress();
byte[] b = NetworkInterface.getByInetAddress(ip)
.getHardwareAddress();
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; i++) {
if (i != 0) {
buffer.append(':');
}
String str = Integer.toHexString(b[i]&0xFF);
buffer.append(str.length() == 1 ? 0 + str : str);
}
strMacAddr = buffer.toString().toUpperCase();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
AvcLog.printd("yttest", "strMacAddr:" + strMacAddr);
String mac = getMac();
AvcLog.printd("yttest" ,"mac:"+mac);
return strMacAddr;
}
/**
* 获取移动设备本地IP
* @return
*/
protected static InetAddress getLocalInetAddress() {
InetAddress ip = null;
try {
//列举
Enumeration en_netInterface = NetworkInterface.getNetworkInterfaces();
while (en_netInterface.hasMoreElements()) {//是否还有元素
NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素
Enumeration en_ip = ni.getInetAddresses();//得到一个ip地址的列举
while (en_ip.hasMoreElements()) {
ip = (InetAddress) en_ip.nextElement();
if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)
break;
else
ip = null;
}
if (ip != null) {
break;
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return ip;
}
2.第二种方法
//获取当前连接网络的网卡的mac地址
private static String parseByte(byte b) {
String s = "00" + Integer.toHexString(b)+":";
return s.substring(s.length() - 3);
}
/**
* 获取当前系统连接网络的网卡的mac地址
* @return
*/
@SuppressLint("NewApi")
public static final String getMac() {
byte[] mac = null;
StringBuffer sb = new StringBuffer();
try {
Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = netInterfaces.nextElement();
Enumeration address = ni.getInetAddresses();
while (address.hasMoreElements()) {
InetAddress ip = address.nextElement();
if (ip.isAnyLocalAddress() || !(ip instanceof Inet4Address) || ip.isLoopbackAddress())
continue;
if (ip.isSiteLocalAddress())
mac = ni.getHardwareAddress();
else if (!ip.isLinkLocalAddress()) {
mac = ni.getHardwareAddress();
break;
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
if(mac != null){
for(int i=0 ;i
sb.append(parseByte(mac[i]));
}
return sb.substring(0, sb.length()-1);
}else {
return null;
}
} 我的机器测试结果,进入adb shell ifconfig 查看系统数据,第一种方法获取的Mac地址较为准确。