2012-09-15 45 views
5

此代码始终返回true。这在按下登录按钮时被调用。我第一次尝试与WiFi连接(在模拟器上)。它返回true,然后我断开wifi然后尝试。它仍然返回true。即使互联网不可用,Android networkinfo始终返回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; 
} 

回答

14

此代码的工作设备上,因为我用我的应用程序的一个非常类似的东西。请记住,此代码会告诉您,您是否将连接到网络,而不是您连接到的网络是否具有互联网连接。如果您使用的是仿真器,它总是通过3G模拟进行连接,所以断开计算机的WiFi并不会改变这一点。您可以将模拟器置于飞行模式,这会给您带来您所寻找的“错误”。

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

+0

因此,没有直接的方法可以判断互联网是否可用? –

+0

没有。问题在于“网络”在这里是一个定义问题。你可以连接到无线网络,完全访问内部网,这可以为你的应用程序。你也可以坐在一个非常严格的防火墙后面,例如阻止www.facebook.com来保持员工的生产力。 您需要明确检查您感兴趣的服务或常用网址。 我的连通性服务不是火箭科学,当我有一点时间时,我会清理它并将它发布到这里 - 可能不是在星期一之前。 – 323go

+1

伟大的答案请问,如果我引用你的答案,只要它适合,因为它让我疯狂的+1 – shareef

相关问题