Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何检查互联网接入?_Android_Networking_Connectivity - Fatal编程技术网

Android 如何检查互联网接入?

Android 如何检查互联网接入?,android,networking,connectivity,Android,Networking,Connectivity,所以,我的问题是如何检查我是否收到任何数据。场景是我连接到一个wifi网络,如星巴克wifi(该用户应首先连接到网络,然后在接收任何数据之前接受协议。) 此代码不符合我的目的 ConnectivityManager cm = (ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetwork

所以,我的问题是如何检查我是否收到任何数据。场景是我连接到一个wifi网络,如星巴克wifi(该用户应首先连接到网络,然后在接收任何数据之前接受协议。) 此代码不符合我的目的

    ConnectivityManager cm =
        (ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) {
        return true;
    }
    return false;

当我连接到网络,但我尚未接受协议时,返回true。谢谢,

没有办法知道这一点,因为这不是在操作系统级别处理的事情,而是在路由器上处理的。操作系统只知道它是否已完成与路由器的握手并接收到IP。路由器是否会让他进入登录屏幕超出操作系统的范围。

您可以通过尝试ping网站来检查这一点。比如说

        try {
            Socket s = new Socket("www.google.com", 80);
            return s.getLocalAddress().getHostAddress();
                            // network connection available
        } catch (Exception e) {
            // no network connection
        }
尽管如此,我还没试过。。但我认为它应该起作用


如果它不起作用,那么你可以尝试另一种方法。向google发送httprequest并等待响应。

我的应用程序连接到云端web服务器上运行的一组web服务。因此,我需要确保在我的应用程序尝试执行操作之前,已建立此连接。我所做的不是检查互联网是否可用,而是呼叫我的一个服务。我有一个简单的TestService,它只返回单词“success”。因此,我的应用程序调用该服务,接收字符串“success”,并知道它已连接到internet并成功访问我的服务。我不必担心ConnectivityManager和NetworkInfo,因为这个解决方案工作得很好


当然,如果我的服务本身出现故障,那么我无法确定设备是否连接到互联网,我只能确定它没有到达我的服务。但是a)我确保我的服务是冗余的,并且有99.9%的正常运行时间;b)如果我的应用程序没有连接到我的服务,那么它就没有多大用处。检查internet的另一种选择可能是尝试连接到一家信誉良好的公司的公共服务,您知道该公司将一直在线。

以下是我在异步任务中运行的内容:

public Boolean testServer(){
    //stackoverflow.com/questions/9552743/proper-way-to-test-if-server-is-up-in-java    
    //stackoverflow.com/questions/9180072/android-check-connection-to-server
    Boolean boolconnect = false; 

    try {
          myUrl = new URL(UPLOAD_URL);
          connection = myUrl.openConnection();
          connection.setConnectTimeout(30*1000);
          connection.connect();
          Log.i(TAG, "FROM SERVER Connection made to: " + UPLOAD_URL);
          boolconnect = true;

    } catch (SocketException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER socket exception:" + e);
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER Unknown host:" + e);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.i(TAG, "FROM SERVER IOexception:" + e);
    }
    return boolconnect;
}

如果您想确定,您需要在isConnected为true时向服务器发送请求,并查看是否得到响应。我想您是对的。不过我没有试过。谢谢你的回答,我想说“没有办法”并不是很准确。我想如果我尝试连接到像谷歌这样的网站,我可以检查是否有任何数据。是这样吗?不过,我试图不实现我自己的逻辑。不,不管怎样,你都会得到回应。通常通过将所有流量重定向到网站来实现这些功能。您可以向自己的网站发送一个请求,该请求将返回一个固定的响应,并比较返回的数据。但是这是一个很好的工作量,你确定你从这个功能中获得了足够的实用性吗?你将不得不详细说明什么是不清楚的?谢谢你的代码,但当我尝试代码时,返回值在接受协议之前仍然为true,而协议本应为false。好的,从服务器下载一个字符串,并将其与该字符串进行比较。我想你确实有联系,但这是有限的。