在我的应用程序,这是我在模拟器上测试,我使用下面的代码来检查网络连接(WIFI):
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
该方法返回总是true
,即使我禁用我的电脑的无线连接...这是造成仿真器或者是其他什么东西?
如果不检查网络连接正确的方式,我该怎么办呢?
这是更好地(1)通过在上下文,使得每一次活动都可以调用这个函数,和(2)使该功能静:
public boolean isNetworkOnline() {
boolean status=false;
try{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getNetworkInfo(0);
if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
status= true;
}else {
netInfo = cm.getNetworkInfo(1);
if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
status= true;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
return status;
}
为了得到getActiveNetworkInfo()工作,你需要以下添加到清单。
1. uses-permission android:name="android.permission.INTERNET"
2. uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
最好使用netInfo.isConnected(),而不是netInfo.isConnectedOrConnecting
也试试这个
Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
要么
Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
我们可以检查使用以下功能连接状态的互联网连接。 谷歌Android已经更新了Android的API函数来检查网络状态。 现在最新的Android API的, getAllNetworkInfo()
已过时。 但getAllNetworks()
函数仅允许用于Build.VERSION.SDK_INT >= 21.I
已编写的代码对于所有的情况。
要检查互联网连接,你可以调用这个函数。
public static boolean checkInternetConnection(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else if(Build.VERSION.SDK_INT >= 21){
Network[] info = connectivity.getAllNetworks();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
return true;
}
}
}
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
}
return false;
}
就我而言,我关掉了无线网络,但忘了关闭数据/移动网络连接。 一旦我做到了,在原来的职位代码为这个线程为我工作。
总结一下:
- 前往设置
- 关闭WiFi
- 进入设置 - >数据使用情况
- 关闭移动数据
这是我如何把它一起在一个项目:
清单文件:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
静态函数:
public static boolean isNwConnected(Context context) {
if (context == null) {
return true;
}
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
if (nwInfo != null && nwInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}