我知道这个问题已经问过几次了,比如这里和这里,但是在检查网络连接性时,我仍然没有通过做类似于这的事情来获得预期的结果。
isAvailable()和网络信息的isConnected()方法都给出了当I连接到目前没有互联网连接的Wi路由器时,布尔真的结果。
这是我手机的屏幕截图,它可以检测到手头的情况。

确保电话/应用程序实际连接到internet的唯一方法是在尝试请求时轮询/ping资源以检查连接性或处理异常吗?
发布于 2019-01-10 05:53:54
如@Levit所述,显示了两种检查网络连接/ Internet接入的方法
--平a服务器
// ICMP
public boolean isOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
}
catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }
return false;
}--连接到因特网上的套接字(高级)
// TCP/HTTP/DNS (depending on the port, 53=DNS, 80=HTTP, etc.)
public boolean isOnline() {
try {
int timeoutMs = 1500;
Socket sock = new Socket();
SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
sock.connect(sockaddr, timeoutMs);
sock.close();
return true;
} catch (IOException e) { return false; }
}第二种方法非常快(不管怎样),工作在所有的设备上,非常可靠。但是不能在UI线程上运行。
https://stackoverflow.com/questions/34470835
复制相似问题