您的位置:

Android IP获取方法详解

一、获取设备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 {
        Enumeration networkInterface = 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 {
            List interfaces = 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地址,方便我们应用开发和调试。