一、什么是IP地址
IP地址是指互联网协议地址,是一个用于区别互联网上不同主机的地址,类似于家庭住址,主要用于指定数据在网络中的目的地址,确定数据通信的源和宿节点的标识。在网络互连时,IP地址可用于唯一标识一个网络接口,一台主机可拥有多个网络接口,每个网络接口都要分配一个IP地址。
二、为什么要获取设备IP地址
在Android开发中,获取设备IP地址是很基础的操作,可以用来做诸如网络状态监测、服务端通信等功能。
三、获取设备IP地址的方法
1. 通过WifiManager获取WiFi IP地址
public static String getWifiIpAddress(Context context) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
return intToIp(ipAddress);
}
private static String intToIp(int i) {
return (i & 0xFF) + "." +
((i >> 8) & 0xFF) + "." +
((i >> 16) & 0xFF) + "." +
(i >> 24 & 0xFF);
}
以上代码通过WifiManager的getConnectionInfo()方法获取到WiFiInfo对象,再通过WiFiInfo对象调用getIpAddress()方法获取到IP地址,最后将十进制的IP地址转成点分十进制的形式即可。
2. 通过NetworkInterface获取本地IP地址
public static String getLocalIpAddress() {
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface ni = en.nextElement();
for (Enumeration enumIpAddr = ni.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress();
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
以上代码通过NetworkInterface类获取到本地网络接口,再通过网络接口获取到InetAddress对象,最后判断是否是IPv4类型并且不是本地回环地址和链接本地地址,最终获取到本机IP地址。
四、获取IP地址的注意事项
1. 获取IP地址需要网络访问权限,在AndroidManifest.xml文件中添加权限<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>和<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
2. 如果获取到的IP地址是0.0.0.0,表示该设备尚未连接到Internet,或者使用的网络无法为其分配IP地址。
3. 对于使用VPN的设备,获取到的IP地址可能是VPN服务器的IP地址,而不是本机IP地址。
五、总结
获取设备IP地址是Android开发中较为常见的操作,一般可以通过WiFiManager或者NetworkInterface来获取IP地址。但需要注意的是,获取IP地址需要网络访问权限,对于使用VPN的设备,获取到的IP地址可能与实际不符。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/259703.html