Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 獲取ip地址和mac地址的多種方式

android 獲取ip地址和mac地址的多種方式

編輯:關於Android編程

部分來自網絡:

        /**
	 * 獲取移動設備本地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 = 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;
	}

        /**
	 * 獲取本地IP
	 * @return
	 */
	public static String getLocalIpAddress() {  
		try {  
			for (Enumeration en = NetworkInterface  
					.getNetworkInterfaces(); en.hasMoreElements();) {  
				NetworkInterface intf = en.nextElement();  
				for (Enumeration enumIpAddr = intf  
						.getInetAddresses(); enumIpAddr.hasMoreElements();) {  
					InetAddress inetAddress = enumIpAddr.nextElement();  
					if (!inetAddress.isLoopbackAddress()) {  
						return inetAddress.getHostAddress().toString();  
					}  
				}  
			}  
		} catch (SocketException ex) {  
			ex.printStackTrace();
		}  
		return null;  
	}
/**
	 * 根據IP地址獲取MAC地址
	 * @return
	 */
	@SuppressLint({ "NewApi", "DefaultLocale" })
	public static String getMacAddress(){
		String strMacAddr = null;
		try { 
			//獲得IpD地址
			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) {

		}

		return strMacAddr; 
	}

       /**
	 * 根據IP獲取本地Mac
	 * @param context
	 * @return
	 */
	public static String getLocalMacAddressFromIp(Context context) {
		String mac_s= "";
		try {
			byte[] mac;
			NetworkInterface ne=NetworkInterface.getByInetAddress(InetAddress.getByName(getLocalIpAddress()));
			mac = ne.getHardwareAddress();
			mac_s = byte2hex(mac);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return mac_s;
	}

	/**
	 * 二進制轉十六進制
	 * @param b
	 * @return
	 */
	public static  String byte2hex(byte[] b) {
		StringBuffer hs = new StringBuffer(b.length);
		String stmp = "";
		int len = b.length;
		for (int n = 0; n < len; n++) {
			stmp = Integer.toHexString(b[n] & 0xFF);
			if (stmp.length() == 1)
				hs = hs.append("0").append(stmp);
			else {
				hs = hs.append(stmp);
			}
		}
		return String.valueOf(hs);
	}

        /**
	 * 根據busybox獲取本地Mac
	 * @return
	 */
	public static String getLocalMacAddressFromBusybox(){   
		String result = "";     
		String Mac = "";
		result = callCmd("busybox ifconfig","HWaddr");
		//如果返回的result == null,則說明網絡不可取
		if(result==null){
			return "網絡異常";
		}
		//對該行數據進行解析
		//例如:eth0      Link encap:Ethernet  HWaddr 00:16:E8:3E:DF:67
		if(result.length()>0 && result.contains("HWaddr")==true){
			Mac = result.substring(result.indexOf("HWaddr")+6, result.length()-1);
			result = Mac;
		}
		return result;
	}   

	private static String callCmd(String cmd,String filter) {   
		String result = "";   
		String line = "";   
		try {
			Process proc = Runtime.getRuntime().exec(cmd);
			InputStreamReader is = new InputStreamReader(proc.getInputStream());   
			BufferedReader br = new BufferedReader (is);   
			
			while ((line = br.readLine ()) != null && line.contains(filter)== false) {   
				result += line;
			}

			result = line;
		}   
		catch(Exception e) {   
			e.printStackTrace();   
		}   
		return result;   
	}


        /**
	 * 根據wifi信息獲取本地mac
	 * @param context
	 * @return
	 */
	public static String getLocalMacAddressFromWifiInfo(Context context){
		WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);  
		WifiInfo winfo = wifi.getConnectionInfo();  
                String mac =  winfo.getMacAddress();
		return mac;
	}



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved