检查Android上的Internet连接

时间:2013-03-25 18:36:58

标签: java android connection

我需要检查Android应用上的互联网连接。

我正在使用此代码:

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

无法传递下一个错误:

  

对于ConxsMTD

类型,方法getSystemService(String)未定义

我尝试使用getContext().getSystemService,但也失败了下一个错误:

  

对于ConxsMTD

类型,方法getContext()未定义

知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

这不会修复您给出的示例,但我的示例确实有效并且更简单(在我看来)。

您要做的是发送“ping”(如果您想将其称为)以检查连接。如果连接完成,您知道您仍然连接。如果您获得IOExceptionNullPointerException,那么您可能会超时并且不再连接。

try {
    URL url = new URL("http://www.google.com");
    HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
    urlConnect.setConnectTimeout(1000);
    urlConnect.getContent();
    System.out.println("Connection established.");
} catch (NullPointerException np) {
    np.printStackTrace();
} catch (IOException io) {
    io.printStackTrace();
}

答案 1 :(得分:0)

使用此代码段,我在每个项目中都使用它:

public static boolean checkNetworkState(Context context) {
    ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo infos[] = conMgr.getAllNetworkInfo();
    for (NetworkInfo info : infos) {
        if (info.getState() == State.CONNECTED)
            return true;
    }
    return false;
}

因此,您只需将getApplicationContext()传递给此方法,例如boolean hasConnection = checkNetworkState(getApplicationContext());