此代码始终返回true。按下“登录”按钮时会调用此方法。我首先尝试连接wifi(在模拟器上)。它返回true然后我断开了wifi然后尝试了。它仍然是真的。
public static boolean isNetworkAvailable( Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// if no network is available networkInfo will be null
// otherwise check if we are connected
if (networkInfo != null && networkInfo.isConnected()) {
State network = networkInfo.getState();
Log.d("here", "true");
return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING);
}
Log.d("here1", "false");
return false;
}
答案 0 :(得分:14)
此代码适用于设备,因为我在其中一个应用中使用了非常相似的内容。请注意,此代码会告诉您是否已连接到网络,而不是您连接的网络是否具有互联网连接。如果你正在使用模拟器,它总是通过3G模拟连接,所以断开你的计算机的wifi将不会改变它。您可以将模拟器置于飞行模式,这样可以为您提供所需的“假”。
我在我的应用程序中所做的是创建一个接收网络更改广播的服务。一旦网络连接,它就会尝试通过互联网下载已知(小)文件。只有在成功的情况下,它才会向所有活动广播互联网可用的意图,然后可以根据此更改状态。