我正在使用此代码检查设备是否在应用程序加载时处于联机状态。
public boolean isOnline()
{
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
但即使它已关闭计算机Wifi进行测试,此ALWAYS也会返回true。这个功能只是测试连接或实际连接的能力吗?
谢谢!
答案 0 :(得分: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。
答案 1 :(得分: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;
}
}
答案 2 :(得分: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" />