在 android 节目中检查互联网连接

checking internet connection on android programming

我尝试编写一个 android 程序来使用两种不同的方法检查互联网连接。第一个是最常见的方法,CheckInternetConnection(),第二个方法是通过连接到网站,ConnectGoogleTest()。 第一个完美运行,但在第二个中我的平板电脑挂了!有人知道为什么吗?

代码是:

public class myITClass {
private Context ctx ;
public myITClass(Context context){
    this.ctx = context;
}

public boolean CheckInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
    //NetworkInfo ni = cm.getActiveNetworkInfo();
    if (cm.getActiveNetworkInfo() == null) {
        // There are no active networks.
        return false;
    } else {

        return true;
    }
  }
public boolean googlePingTest(){
    boolean res = false ;
    try {
        URL url = new URL("http://www.google.com/");
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setConnectTimeout(15000);
        urlc.connect();
        if (urlc.getResponseCode() == 200) { res = true; }
    } catch (MalformedURLException e1) {
        res = false;
    } catch (IOException e) {
        res = false ;
    }catch (Exception e){
        res = false ;
    }

    return res;
}
}

第二种方法在主线程上同步调用网络,并阻塞 UI。尝试为此使用 AsyncTask。

您可以通过 HttpURLConnectionhttp://www.google.com/ 发送 ping。请确保您在后台线程中执行此操作。创建网络任务必须在后台运行。有 3 个选项可以做到这一点:

这次我们将使用AsyncTask。所以在你的 Activity:

中创建一个私有的 class
private boolean res = false;
private class PingTask extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... urlSite) {
        HttpURLConnection urlc = null;

        try {
          URL url = new URL("http://www.google.com/");
          urlc = (HttpURLConnection) url.openConnection();
          urlc.setConnectTimeout(15000);
          urlc.setRequestMethod("GET");
          urlc.connect();

         if (urlc.getResponseCode() == 200) { res = true; }
      } catch (MalformedURLException e1) {
         res = false;
      } catch (IOException e) {
         res = false ;
      }catch (Exception e){
         res = false ;
      }finally{
            if (urlc != null) {
                try{
                    // close the connection
                    urlc.disconnect();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        return null;
     }
}

不要忘记在您的 class:

中添加此字段
private boolean res = false;

创建获取状态的方法:

public boolean getStatus(){
    return status;
}

如何使用?

先执行PingTask检查状态:

PingTask ping = new PingTask();
ping.execute();

获取状态:

// if the connection is available
if(getStatus()==true){
    // do your thing here.
}