使用未弃用的方法以编程方式获取 Android 设备的 IPv4 和 IPv6,无论是在 Wifi 上还是在 Carier 的网络上

leh*_*rer 5 android ipv4 ipv6 android-networking

我遇到了一些关于在 Android 上以编程方式获取IPv4 和 IPv6 地址的讨论。这些其他问题和答案的问题是:

  • 这些问题/答案现在已经老了,因此经常被弃用。我正在寻找一种以非弃用方式完成它的方法(例如,不推荐使用 InetAddressUtils,其他方式也是如此)。
  • 我想知道如何在 Wifi 或运营商网络同时获取IPv4 和 IPv6地址。

有没有人可以告诉我如何在没有冗长方法的情况下以简短整洁的方式完成它(如果可能的话)?

小智 5

对于 ipv4,ipv6 你可以使用

   public String getIpv4() {
            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();
                        System.out.println("ip1--:" + inetAddress);
                        System.out.println("ip2--:" + inetAddress.getHostAddress());

                        if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                            String ipaddress = inetAddress.getHostAddress().toString();
                            return ipaddress;
                        }


                    }
                }
            } catch (Exception ex) {
                Log.e("IP Address", ex.toString());
            }
            return null;
        }

//ipv6
  public String getLocalIpV6() {
        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();
                    System.out.println("ip1--:" + inetAddress);
                    System.out.println("ip2--:" + inetAddress.getHostAddress());

                    if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) {
                        String ipaddress = inetAddress.getHostAddress().toString();
                        return ipaddress;
                    }


                }
            }
        } catch (Exception ex) {
            Log.e("IP Address", ex.toString());
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)