5

此代码始终返回 true。当按下登录按钮时调用它。我首先尝试连接wifi(在模拟器上)。它返回true,然后我断开wifi,然后尝试。它仍然返回 true。

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;
}
4

1 回答 1

14

此代码适用于设备,因为我在我的一个应用程序中使用了非常相似的东西。请记住,此代码将告诉您是否已连接到网络,而不是您所连接的网络是否具有 Internet 连接。如果您使用的是模拟器,它始终通过 3G 模拟连接,因此断开计算机的 wifi 连接不会改变这一点。您可以将模拟器置于飞行模式,这应该会为您提供您正在寻找的“错误”。

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

于 2012-09-15T22:52:01.983 回答