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

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

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

public static String getGPRSLocalIpAddress() {
			try {
				for (Enumeration<NetworkInterface> en = NetworkInterface
						.getNetworkInterfaces(); en.hasMoreElements();) {
					NetworkInterface intf = en.nextElement();
					for (Enumeration<InetAddress> 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地址,需要添加此权限

<uses-permission android:name="android.permission.INTERNET" />

下面这个是获取连接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;
	    }  

需要以下权限:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
	<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
	<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

然后是获取Mac地址:

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

public static String getMacAddr() {  
	        try {  
	            List<NetworkInterface> 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获取网关信息,例如下面这种形式:


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

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

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值