我使用下面的代码检查是否有可用的网络,但有时候 网络可用,但没有数据传输,这是我的互联网 连接失败并抛出异常。
这是代码:
public boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
那么,谁能帮我找到解决方案?
由于
答案 0 :(得分:1)
我正在使用以下代码来检查连接性,因为我认为仅仅确定网络信息并不能保证互联网连接。因此,我认为最好向远程URL发出实际的HTTP请求,看看它是否成功。
public static boolean isInternetAvailable(Context cxt) {
ConnectivityManager cm = (ConnectivityManager) cxt
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting() && canHit()) {
Log.i(App.TAG, "Network connection available.");
return true;
}
return false;
}
public static boolean canHit() {
try {
URL url = new URL("http://www.google.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.connect();
urlConnection.disconnect();
return true;
} catch (Exception e){
e.printStackTrace();
return false;
}
}
答案 1 :(得分:0)
用户可能在BT openzone或类似的连接上,他们有连接,但在通过网络浏览器提供密码之前无法访问互联网。数据连接问题总是会发生,你只需要在每种情况下处理它们。
同时结帐
isConnectedOrConnecting()
检查用户是否仍在建立连接。见http://developer.android.com/reference/android/net/NetworkInfo.html