如何在Android中检查连接

时间:2018-03-08 10:39:52

标签: android httpurlconnection

我必须实现一个控制互联网连接存在的功能,我需要确切地知道你是否可以浏览,不知道你是否连接到wifi或数据。

在某些情况下,您可能会连接到网络,但无法浏览,例如当您连接到开放式wifi网络(例如Mc Donalds)时,但要导航则需要登录,连接可用,但您不是能够浏览。

在这种情况下,我就足以利用设置超时(但从未考虑过)。

我试图实现不同的功能,但我无法获得所需的结果,例如:

public boolean checkConnection() {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    boolean response;
    if (netInfo != null && netInfo.isConnected()) {
        try {
            URL url = new URL("http://www.google.it");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(1000);
            conn.connect();
            response = conn.getResponseCode() == 200;
            conn.disconnect();
        } catch (Exception e) {
            response = false;
        }
    } else {
        response = false;
    }
    return response;
}

另一个功能:

public boolean isInternetAvailable(String address, int port, int timeoutMs) {
    try {
        Socket sock = new Socket();
        SocketAddress sockaddr = new InetSocketAddress(address, port);

        sock.connect(sockaddr, timeoutMs); 
        sock.close();

        return true;

    } catch (IOException e) { return false; } }

此功能永远不会考虑超时。

我如何解决我的问题?

****************编辑1 ****************

我正在通过wifi连接到网络的平板电脑上测试代码,通过防火墙我阻止了所有连接,以模拟任何问题中描述的情况。使用建议给我的代码,你会注意到超时值永远不会被遵守,应用程序进入异常:

  

异常:java.net.UnknownHostException:无法解析主机   “www.google.com”:没有与主机名相关联的地址。

真正的问题是所有这些功能都需要很长时间才能告诉我没有连接,我需要一个在1/2秒内响应的功能

3 个答案:

答案 0 :(得分:1)

cat prova.ksh
#!/bin/ksh
echo start
while read line; do    
   echo $line    
done < "/your/complete/path/File1.xml"

答案 1 :(得分:1)

检查您是否具有输出互联网连接的最简单方法是ping一些随机服务器(www.google.com可能是一个很好的例子):

InetAddress.getByName("www.google.com").isReachable(5000)

答案 2 :(得分:-1)

你可以完全做其他事情。

拥有一台始终在服务器上运行的服务,并确保您拥有该服务的网址。

每次要检查连接时,都可以从应用中调用该服务。检查该服务的响应代码,或者让它返回给您。根据结果​​代码或服务返回的数据,您可以得出结论是否有可用的互联网连接。

也许有更简单的方法来做你要求的但是这个肯定会有用。