Android NetworkInfo始终返回true,即使没有可用的互联网连接

5

这段代码总是返回true。当用户按下登录按钮时,它会被调用。我最初在模拟器上尝试连接WiFi(wifi connected),它返回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;
}
1个回答

14

这段代码在设备上运行,因为我在我的一个应用程序中使用了非常相似的东西。请记住,这段代码将告诉您是否与网络连接,而不是您所连接的网络是否具有互联网连接。如果您正在使用模拟器,则始终通过3G模拟连接,因此断开计算机的wifi连接不会改变这种情况。您可以将模拟器置于飞行模式,这应该会给您想要的“false”。

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


那么没有直接的方法来判断互联网是否可用吗? - Kevin Rave
没有问题。问题在于“网络”在这里是一个定义的问题。你可以连接到wifi,完全访问内部网络,这对你的应用程序可能是可以的。你也可以坐在一个非常严格的防火墙后面,例如阻止www.facebook.com以提高员工生产力。 您需要明确检查您感兴趣的服务或常见的url。 我的ConnectivityService并不是什么高深的科学,我会在有时间的时候整理一下并在这里发布——但可能要等到周一之后了。 - 323go
1
非常好的答案,如果适用的话,我会引用你的答案,因为它让我着迷。+1 - shareef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接