2

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

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

当我连接到网络但我还没有接受协议时它返回 true。谢谢,

4

4 回答 4

0

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

当然,如果我的服务本身出现故障,那么我无法确定设备是否连接到互联网,我只能确定它无法访问我的服务。但是 a) 我确保我的服务是冗余的并且有 99.9% 的正常运行时间,并且 b) 如果不连接到我的服务,我的应用程序不会有太大用处。仅检查互联网的替代方法可能是尝试连接到您知道将始终在线的知名公司的公共服务。

于 2013-05-08T18:18:35.887 回答
0

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

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;
}
于 2013-05-08T18:27:39.900 回答
0

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

于 2013-05-08T18:07:21.143 回答
0

您可以通过尝试 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 并等待响应。

于 2013-05-08T18:14:10.890 回答