一、获取设备IP地址的方法
每个使用Android设备的人都需要知道自己设备的IP地址,以便让设备连接到网络或与另一个设备进行通信。Android提供了多种方法方便我们获取设备IP地址,下面我们介绍一些最常用的方法:
1. 使用WifiManager获取IP地址
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); if(wifiManager != null){ WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String ip = String.format(Locale.getDefault(), "%d.%d.%d.%d", (ipAddress & 0xff), (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff)); }
上面的代码使用了WifiManager类来获取当前连接到的Wifi的IP地址。我们可以通过调用WifiManager对象的getConnectionInfo()方法获得WifiInfo对象,然后调用getIpAddress()方法获取IP地址。
2. 使用NetworkInterface获取IP地址
try { EnumerationnetworkInterface = NetworkInterface.getNetworkInterfaces(); while(networkInterface.hasMoreElements()){ NetworkInterface netInterface = networkInterface.nextElement(); Enumeration addresses = netInterface.getInetAddresses(); while(addresses.hasMoreElements()){ InetAddress inetAddress = addresses.nextElement(); if(!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress()){ String ip = inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); }
上面的代码使用了NetworkInterface类来获取设备的IP地址。首先我们调用NetworkInterface类的getNetworkInterfaces()方法获得所有的网络接口,然后遍历每个网络接口,使用InetAddress类的getInetAddresses()方法得到每个IP地址。判断该地址既不是LinkLocalAddress,也不是LoopbackAddress,即为设备的IP地址。
二、获取设备外网IP地址的方法
有时我们需要获取设备的外网IP地址,即设备所连接的无线路由器的IP地址。Android提供了获取外网IP地址的方法,方法如下:
1. 使用第三方服务获取IP地址
我们可以使用第三方IP查询服务获取设备所连接无线路由器的IP地址。目前比较流行的三个服务分别是:http://ifconfig.me/ip、http://checkip.amazonaws.com/和http://icanhazip.com/。
try { URL url = new URL("http://checkip.amazonaws.com/"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String ipStr = reader.readLine().trim(); reader.close(); String ip = InetAddress.getByName(ipStr).getHostAddress(); } catch (IOException e) { e.printStackTrace(); }
上述代码使用HttpURLConnection来连接第三方服务,从服务中获取IP地址的字符串表示。获取到IP地址后,我们可以使用这个地址来建立InetAddress对象,并使用getHostAddress()方法获得无线路由器的IP地址。其他两个服务的调用方法类似。
2. 使用Router Advertisement获取IP地址
在一些新的无线路由器上,我们可以使用Router Advertisement协议自行为Android的设备分配IP地址。该方法不需要任何其他服务,只需要在Router Advertisement的有效范围内就能获得IP地址。具体使用方法如下:
private String getIpv6Address() { String ipv6 = null; try { Listinterfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); if (interfaces.size() > 0) { for (NetworkInterface iface : interfaces) { if (iface.isUp() && !iface.isLoopback()) { List addresses = iface.getInterfaceAddresses(); for (InterfaceAddress addr : addresses) { InetAddress inetAddress = addr.getAddress(); if (inetAddress instanceof Inet6Address) { ipv6 = inetAddress.getHostAddress(); } } } } } } catch (SocketException e) { e.printStackTrace(); } return ipv6; }
上述代码使用了NetworkInterface类来获取设备的IP地址。 首先我们调用NetworkInterface类的getNetworkInterfaces()方法获得所有的网络接口,然后遍历每个网络接口,使用InetAddress类的getInetAddresses()方法得到每个IP地址。 判断该IP地址是否为IPv6协议地址,是的话即为设备的IP地址。
三、总结
本文详细介绍了Android中获取设备IP地址和设备外网IP地址的常用方法。通过以上方法,可以轻松地获取设备的IP地址和外网IP地址,方便我们应用开发和调试。