获取/设置安卓IPv4地址

3
我需要一个简单的辅助类来在API 18及以上版本上执行以下工作:
1- 为设备设置/获取静态IP地址。
2- 为设备设置/获取DHCP IP地址。
public static class IPv4Helper {
    public static class ipV4Parameters {
        String ipAddress;
        String subnetMask; // or int
        String defaultGateway;
        String dns1;
        String dns2;
    }

    public static boolean isDhcpEnabled() {
        ...
        if (current_wifi_is_on_DHCP)
            return true;
        else
            return false;
    }

    public static ipV4Parameters getStaticIpV4Parameters() {
        ...
    }

    public static ipV4Parameters getDhcpIpV4Parameters() {
        ...
    }
    public static boolean setStaticIpV4Address(ipV4Parameters newStaticAddress) {
        ...
    }
    public static boolean setDhcpEnabled() {
        ...
    }
}

我发现有多种方法可以实现此功能,但有些方法已被弃用,我很困惑哪种解决方案更好。有人可以帮助我找到最佳和更标准的方法吗?

1个回答

0

这个SO线程对你获取getDhcpIpV4Parameters没有帮助吗?

我用Utils方法/代码来获取我找到的第一个IPV4地址是:

public static String getStaticIpV4Address() {
        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();
                    // for getting IPV4 format
                    String ipv4; //= inetAddress.getHostAddress().toString();
                    if ( (!inetAddress.isLoopbackAddress()) 
                            && (InetAddressUtils.isIPv4Address(ipv4 = inetAddress.getHostAddress())) ) {
                        return ipv4;
                    }
                }
            }
        } catch (SocketException ignored) {}

        return null;
    }

您链接的上述SO使用了已经被弃用的getDhcpInfo函数。 - Ahmad Behzadi
获取静态子网、网关、DNS怎么样?我该如何设置它们? - Ahmad Behzadi
1
对于子网,您可以使用此SO线程。只需使用“intf”变量即可获取InterfaceAddress列表。 - r.pedrosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接