【问题标题】:How to check internet access?如何检查互联网访问?
【发布时间】:2013-05-08 18:05:19
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您想确定,您需要在 isConnected 为真时向您的服务器发送请求,并查看是否收到响应。
  • 我猜你是对的。不过我还没试过。

标签: android networking connectivity


【解决方案1】:

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

【讨论】:

  • 感谢您的回答,我猜说没有办法是不准确的。我想如果我尝试连接到像谷歌这样的网站,我可以检查是否有任何数据传入。那正确吗?不过,我试图不实现自己的逻辑。
  • 不,无论哪种方式你都会得到回应。这些事情通常是通过将所有流量重定向到网站来实现的。您可以向您自己的网站发送一个请求,该请求将返回一个固定的响应,并比较返回的数据。但这是大量的工作,你确定你从这个功能中获得了足够的实用性吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      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;
      }
      

      【讨论】:

      • 你将不得不详细说明
      • 什么不清楚?感谢代码,但是当我尝试代码时,在接受本应为假的协议之前返回值仍然为真。
      • 好的,从服务器下载一个字符串并将它与字符串应该是什么进行比较。我猜你确实有联系,但它是有限的。 stackoverflow.com/questions/2922210/…
      猜你喜欢
      • 2016-09-10
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多