Android API-23中的InetAddressUtils如何替换?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

切换到Android的API,我使用org.apache.http.conn.util.InetAddressUtilsInetAddressUtils.isIPv4Address(ipAddress)一个代码,列出从设备的所有IP。

作为API-23变更的一部分,InetAddressUtils类现在不在了。

我现在可以如何替换下面的代码:

public static String ipAddress() {
    try {
        for (final Enumeration<NetworkInterface> enumerationNetworkInterface = NetworkInterface.getNetworkInterfaces(); enumerationNetworkInterface.hasMoreElements();) {
            final NetworkInterface networkInterface = enumerationNetworkInterface.nextElement();
            for (Enumeration<InetAddress> enumerationInetAddress = networkInterface.getInetAddresses(); enumerationInetAddress.hasMoreElements();) {
                final InetAddress inetAddress = enumerationInetAddress.nextElement();
                final String ipAddress = inetAddress.getHostAddress();
                if (! inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipAddress)) {
                    return ipAddress;
                }
            }
        }
        return null;
    }
    catch (final Exception e) {
        LogHelper.wtf(null, e);
        return null;
    }
}
提问于
用户回答回答于

就像我从评论中解释的那样,你可以用这个比较来替换那个函数:

inetAddress instanceof Inet4Address

所以你的代码将在以下结束:

if(!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
用户回答回答于

我找不到比转换到Inet4Address或Inet6Address更好的东西:

public boolean isValidIp4Address(final String hostName) {
      try {
         return Inet4Address.getByName(hostName) != null;
     } catch (UnknownHostException ex) {
         return false;
     } 
}

public boolean isValidIp6Address(final String hostName) {
      try {
         return Inet6Address.getByName(hostName) != null;
     } catch (UnknownHostException ex) {
         return false;
     } 
}

扫码关注云+社区