我知道这个问题曾被问过几次,例如here和here,但在检查时,我仍然无法通过执行与this类似的操作获得所需的结果网络连接
当我连接到目前拥有的Wi-Fi路由器时,来自isAvailable()的isConnected()和Network Info方法都会产生布尔值为真的结果没有互联网连接。
确保手机/应用程序实际连接到互联网的唯一方法是实际轮询/ ping资源以检查连接或在尝试发出请求时处理异常吗?
答案 0 :(得分:0)
如@Levit所述,显示了两种检查网络连接/互联网访问的方式
-ping服务器
// 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;
}
-连接到Internet上的套接字(高级)
// 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线程上运行。