Android 检查IPv6是否可用的最佳方法

Android 检查IPv6是否可用的最佳方法,android,ipv6,Android,Ipv6,检查当前安卓手机上是否提供IPv6的最佳方法是什么 我目前的想法是使用和枚举via,但这似乎太复杂了 有更简单的方法吗?如果需要检查所有接口,我不知道还有比使用更简单的方法,但应该没有那么糟糕: for(NetworkInterface netInt: NetworkInterface.getNetworkInterfaces()){ for(InterfaceAddress address: netInt.getInterfaceAddresses()){ if(add

检查当前安卓手机上是否提供IPv6的最佳方法是什么

我目前的想法是使用和枚举via,但这似乎太复杂了


有更简单的方法吗?

如果需要检查所有接口,我不知道还有比使用更简单的方法,但应该没有那么糟糕:

for(NetworkInterface netInt: NetworkInterface.getNetworkInterfaces()){
    for(InterfaceAddress address: netInt.getInterfaceAddresses()){
        if(address.getAddress() instanceof Inet6Address){
            // found IPv6 address
            // do any other validation of address you may need here
        }
    }
}
如果知道要检查的地址,可以跳过使用
NetworkInterface
,通过调用
InetAddress
的静态方法之一检查特定的
InetAddress
,并检查该地址是否为
Inet6Address

布尔isIPV6=false的实例;
boolean isIPV6 = false;
Enumeration<NetworkInterface> networkInterfaces =
    NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
    NetworkInterface ni = networkInterfaces.nextElement();
    for (InterfaceAddress addr : ni.getInterfaceAddresses()) {
        if (addr.getAddress() instanceof Inet6Address) {
            isIPV6 = true;
        }
    }
}
枚举网络接口= NetworkInterface.getNetworkInterfaces(); while(networkInterfaces.hasMoreElements()){ NetworkInterface ni=networkInterfaces.nextElement(); 对于(InterfaceAddress地址:ni.GetInterfaceAddress()){ if(Inet6Address的addr.getAddress()实例){ isIPV6=真; } } }
这仅在设备当前连接到ipv6网络时有效,对吗?这只会告诉您有ipv6适配器。如果您位于仅IPv4网络下游的NAT64网络上,这将假定您具有IPv6连接,但当您尝试建立IPv6连接时,它将失败。为什么此解决方案比已接受的解决方案更好?您忘记在回答中编写任何文档。
NetworkInterface.getNetworkInterfaces()
返回一个枚举,因此您无法对其进行访问,您需要像使用
迭代器一样使用它。除此之外,答案基本相同。我的只是汇编-P