即使互联网不可用,Android networkinfo也会返回true

时间:2012-09-15 22:13:12

标签: android networking

此代码始终返回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;
}

1 个答案:

答案 0 :(得分:14)

此代码适用于设备,因为我在其中一个应用中使用了非常相似的内容。请注意,此代码会告诉您是否已连接到网络,而不是您连接的网络是否具有互联网连接。如果你正在使用模拟器,它总是通过3G模拟连接,所以断开你的计算机的wifi将不会改变它。您可以将模拟器置于飞行模式,这样可以为您提供所需的“假”。

我在我的应用程序中所做的是创建一个接收网络更改广播的服务。一旦网络连接,它就会尝试通过互联网下载已知(小)文件。只有在成功的情况下,它才会向所有活动广播互联网可用的意图,然后可以根据此更改状态。