Android - 使用ping检查Internet连接的大量绑定

时间:2016-11-14 06:54:07

标签: java android delay ping

我已经编写了一些代码来ping Google以检查互联网连接。

该应用程序可以正常工作,但需要花费大量时间才能发回响应(最多1分钟)。特别是当移动网络打开但没有互联网连接时,会发生这种情况

如果您能帮我找到解决方案,我将不胜感激

布局只包含一个Button。 以下是我的Java代码:

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main_activity_final);
  Button b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              //Thread t = new Thread(new Runnable() {
              //  public void run() {
                    //pingCheck = isURLReachable(getApplicationContext());
                    new MyTask().execute();
                    //}
              //});
              //t.start(); 
            }
        });
  }

  private class MyTask extends AsyncTask<Void, Void, Boolean> {
    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Boolean doInBackground(Void... params) {
      try {
        URL url = new URL("http://google.com");   // Change to "http://google.com" for www  test.
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setConnectTimeout(10*500);          // 10 s.
        urlc.connect();

        if (urlc.getResponseCode() == 200) {        // 200 = "OK" code (http connection is fine).
           Log.wtf("Connection", "Success !");
           return true;
        } else {
           return false;
        }
      } catch (MalformedURLException e1) {
        return false;
      } catch (IOException e) {
        return false;
      }
    }

    @Override
    protected void onPostExecute(Boolean result) {
      boolean bResponse = result;
      if (bResponse==true) {
        Toast.makeText(MainActivityFinal.this, "Network  is available", Toast.LENGTH_LONG).show();      
      } else {           
        Toast.makeText(MainActivityFinal.this, "Network  is not available", Toast.LENGTH_LONG).show();
      }                  
    }               
  }

谢谢。

1 个答案:

答案 0 :(得分:0)

我建议在urlc.setReadTimeout(10*500);下面添加urlc.setConnectTimeout(10*500);

顺便说一下,它的超时时间是5秒,而不是10秒。