序言
在Android开发中,有很多地方需要使用IP地址,但是有时候Android设备获取的IP地址是有区别的,比如如果Android设备创建一个热点,那此时这个Android设备就有两个IP地址了,一个是本身的IP地址,一个是热点的路由器IP地址,这个获取方式是不一样的。
获取本机IP地址
java
try {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
int ipAddress = wifiInfo.getIpAddress();
String ipHostAddress = Formatter.formatIpAddress(ipAddress);
Log.e(TAG, "本机IP:" + ipHostAddress);
}
} catch (Exception e) {
AgLog.printException(e);
}
获取路由器IP地址
java
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
if (!address.isLoopbackAddress() && !address.isLinkLocalAddress() && address.isSiteLocalAddress()) {
// 返回第一个非回环、非链路本地地址
ipHostAddress = address.getHostAddress();
Log.e(TAG, "本机IP:" + ipHostAddress);
break;
}
}
}
} catch (Exception e) {
AgLog.printException(e);
}
另外需要注意,需要先设置权限,再获取IP地址
xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />