检查互联网连接 - Android

时间:2015-12-26 11:21:28

标签: android

我知道这个问题曾被问过几次,例如herehere,但在检查时,我仍然无法通过执行与this类似的操作获得所需的结果网络连接

当我连接到目前拥有的Wi-Fi路由器时,来自isAvailable()isConnected()Network Info方法都会产生布尔值为真的结果没有互联网连接。

这是我的手机的屏幕截图,可以检测到手头的情况。 My phone dose detect this possibility and shows a alert for that

确保手机/应用程序实际连接到互联网的唯一方法是实际轮询/ ping资源以检查连接或在尝试发出请求时处理异常吗?

1 个答案:

答案 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线程上运行。

Details here