在Android上检查互联网连接
问题描述:
我想为用户显示一条消息,如果他不在Internet可用性范围内。我正在使用下面的代码片段,但即使在网络可用的情况下它也显示异常。在Android上检查互联网连接
我做错了什么?
public boolean isInternetAvailable(){
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
答
你会得到哪些例外?也许你忘了在清单文件中添加android.permission.ACCESS_NETWORK_STATE
。
答
看来你忘了你的清单文件中添加此片段:在清单
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
下面
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答
添加权限是会给你你是否连接到任何一个方法网络或wifi
public static boolean isNetworkAvailable(Context context) {
boolean available = false;
try {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
available = true;
}
}
}
}
if (available == false) {
NetworkInfo wiMax = connectivity.getNetworkInfo(6);
if (wiMax != null && wiMax.isConnected()) {
available = true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return available;
}
答
如果您在Manifest和您拥有所需的权限仍然有问题,我会稍微修改代码:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm != null) {
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
}
}
return false;
答
我只想补充一点,如果有网络连接张贴OP代码将只检查。 如果使用wifi连接,它只会检查手机是否连接到各自的Wifi。
但它不会给你任何错误的情况下,WiFi实际上有一个工作的互联网连接。
您可能需要使用除另一个检查上面,像这样:
try {
HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection());
httpConnection.setRequestProperty("User-Agent", "Test");
httpConnection.setRequestProperty("Connection", "close");
httpConnection.setConnectTimeout(15000);
httpConnection.connect();
if (httpConnection.getResponseCode() == 204){
//internet is avialable
return;
}else{
Log.e(TAG, "Internet connection error: " + httpConnection.getResponseCode()
+ ": " + httpConnection.getResponseMessage());
}
} catch (IOException e) {
Log.e(TAG, "Internet connection error: " + e);
}
你为什么不发送数据包,并处理异常? – Mob 2012-01-28 18:09:50
您是否在清单中添加了此项:'' – Zakaria 2012-01-28 18:15:33
可能的重复项:http://stackoverflow.com/q/2753412/1048330 – tenorsax 2012-01-28 18:15:41