Android开发获取IP和MAC(通过7.1版本测试)

        首先吐槽一下,在网上找了很多方法,但是一进去就崩溃了,这里要记住一个教训,try catch抛出的异常信息要打印Log,事实证明是没有添加相应权限导致的闪退.

        下面直接列出我验证OK的方法:

public static String getGPRSLocalIpAddress() {
			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) {
				Log.e("zdd",ex.toString());
			}
			return null;
		}
	    private static String formatIpAddress(int ipAdress) {    
	      
	         return (ipAdress & 0xFF ) + "." +    
	        ((ipAdress >> 8 ) & 0xFF) + "." +    
	        ((ipAdress >> 16 ) & 0xFF) + "." +    
	        ( ipAdress >> 24 & 0xFF) ;
	     }

上面是获取连接有线时的IP地址,需要添加此权限

下面这个是获取连接WIFI时的IP地址.

public static String getWIFILocalIpAdress(Context mContext) {
	      
	        //获取wifi服务
	        WifiManager wifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
	        //判断wifi是否开启
	        if (!wifiManager.isWifiEnabled()) {
	        wifiManager.setWifiEnabled(true); 
	        }
	        WifiInfo wifiInfo = wifiManager.getConnectionInfo();    
	        int ipAddress = wifiInfo.getIpAddress();
	        String ip = formatIpAddress(ipAddress);
	        return ip;
	    }  

需要以下权限:

     
	 
	 

然后是获取Mac地址:

private static String wifiTag = "wlan0";//有线标志
private static String localTag = "eth0";//无线标志

public static String getMacAddr() {  
	        try {  
	            List all = Collections.list(NetworkInterface.getNetworkInterfaces());  
	            for (NetworkInterface nif : all) {  
	                if (!nif.getName().equalsIgnoreCase(localTag)) continue;  
	  
	                byte[] macBytes = nif.getHardwareAddress();  
	                if (macBytes == null) {  
	                    return "";  
	                }  
	  
	                StringBuilder res1 = new StringBuilder();  
	                for (byte b : macBytes) {  
	                    res1.append(String.format("%02X:",b));  
	                }  
	  
	                if (res1.length() > 0) {  
	                    res1.deleteCharAt(res1.length() - 1);  
	                }  
	                return res1.toString();  
	            }  
	        } catch (Exception ex) {  
	        }  
	        return "02:00:00:00:00:00";  
	    }   

在cmd中通过adb shell进入Android系统,ifconfig获取网关信息,例如下面这种形式:

Android开发获取IP和MAC(通过7.1版本测试)_第1张图片

这是只连接有线网络的情况,lo是本地回环,eth0表示有线连接信息,其中inet addr就是IP地址,HWaddr是MAC地址.

连接无线时会有wlan0,后面列出的信息格式相同.

你可能感兴趣的:(Android开发)