android获取有线网的Mac地址

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

我的机器测试结果,进入adb shell ifconfig 查看系统数据,第一种方法获取的Mac地址较为准确。

你可能感兴趣的:(android)