2012-10-05 107 views
2

使用此代码来检查设备是否在线时,应用程序加载。查看在线状态android

public boolean isOnline() 
{ 
    ConnectivityManager connMgr = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    return (networkInfo != null && networkInfo.isConnected()); 
} 

但是,这总是返回true,即使它关闭了计算机的Wifi测试。这个函数只是测试连接或实际连接的能力吗?

谢谢!

+1

你提到需要这2个权限 “计算机无线网络。”你在模拟器中测试这个吗? – Brigham

+0

[Android检查互联网连接]可能的重复(http://stackoverflow.com/questions/9570237/android-check-internet-connection) –

回答

9

尝试使用:

private boolean isOnline() 
    { 
     try 
     { 
      ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
      return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
     } 
     catch (Exception e) 
     { 
      return false; 
     } 
    } 

哪里mContext是你使用的上下文。

我的猜测是你的代码在设备上可以正常工作,但你可能正在模拟器上测试。我注意到,即使计算机的互联网如果关闭,模拟器有时仍保持连接状态。为了实现正确的功能,您应该进入设置并从那里禁用WiFi和移动数据,而不是关闭计算机的WiFi。

此外,如果设备处于连接过程中,我上面给出的代码也会返回true,而您正在使用的代码只会在已建立连接时返回true。

+0

为什么downvote? –

+0

这为什么会有所作为?据推测,OP在一个'Activity'或其他扩展Context的应用程序组件中调用'getSystemService(...)',否则代码将无法编译。这就是为什么downvote。 – Squonk

+0

呃,我不是说用'mContext'就能解决问题。我正在使用不同的return语句。我已经无数次地使用过这个代码,因此提出了它。 –

4

此代码一直为我工作。

`

public boolean isNetworkAvailable() { 
     ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

// test for connection 
     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() 
       && cm.getActiveNetworkInfo().isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+0

非常感谢您的回复。看起来它可能只是一个模拟器问题。 –

1
protected boolean isOnline() 
{ 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      if (activeNetwork.isConnected()) 
       haveConnectedWifi = true; 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      if (activeNetwork.isConnected()) 
       haveConnectedMobile = true; 
     } 
    } 

    return haveConnectedWifi || haveConnectedMobile; 
} 

而且在manifest

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

感谢提及清单权限 –