如果用户没有网络可用性,我想为用户显示一条消息。我正在使用以下代码片段,但即使在网络可用性的情况下也显示异常。
我做错了什么?
public boolean isInternetAvailable(){
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
答案 0 :(得分:1)
你得到哪个例外?也许您忘了在清单文件中添加android.permission.ACCESS_NETWORK_STATE
。
答案 1 :(得分:1)
您似乎忘记在清单文件中添加此代码段:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 2 :(得分:0)
在清单中添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_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;
}
答案 3 :(得分:0)
如果您在Manifest中拥有所需权限但仍有问题,我会略微修改您的代码:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm != null) {
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
return true;
}
}
return false;
答案 4 :(得分:0)
我想补充一点,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);
}