1

我需要检查 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() 未定义

知道我做错了什么吗?

4

2 回答 2

1

这并不能解决您给定的示例,但我的示例确实有效并且更简单(在我看来)。

你想要做的是发送一个“ping”(如果你想这样称呼它)来检查连接。如果连接完成,您就知道您仍然处于连接状态。如果您得到 aIOException或 a NullPointerException,那么您可能已超时并且不再连接。

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();
}
于 2013-03-25T18:38:28.963 回答
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());

于 2013-03-25T18:53:24.817 回答