通常在构建需要API调用等的Android应用程序时,我会在进行此类调用之前检查NetworkAvailability:
public boolean networkIsAvailable() {
boolean result = false;
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
if (activeNetworkInfo != null) {
if (activeNetworkInfo.isConnected()) {
result = true;
}
}
return result;
}
足够简单......但是当用户在没有移动连接且连接到Wifi网络的设备上时会发生什么,但是Wifi网络没有互联网访问权限。
除了捕获java.net.UnknownHostException以测试实际的互联网访问外,还有其他选择吗?
答案 0 :(得分:1)
您可以使用:
public static boolean hasActiveInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
urlc.setRequestProperty("User-Agent", "Test");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1500);
urlc.connect();
return (urlc.getResponseCode() == 200);
} catch (IOException e) {
Log.e(LOG_TAG, "Error checking internet connection", e);
}
} else {
Log.d(LOG_TAG, "No network available!");
}
return false;
}
请记住:"正如Tony Cho在下面的评论中指出的那样,请确保您不在主线程上运行此代码,否则您将获得NetworkOnMainThread异常(在Android中) 3.0或更高版本)。请改用AsyncTask或Runnable。"