实际上,当网络可用时,您有四种状态(如果有互联网,则为第五种)。
当网络可用时,您需要通过监视Wifi和移动网络的状态来检查互联网提供商,您的四种状态是:
Wifi更改状态并且
1. 移动网络已启用
2. 移动网络已禁用
移动网络更改状态并且
1. Wifi已启用
2. Wifi已禁用
首先,您必须监视互联网是否可用。然后,您将不得不添加类似的两个侦听器(广播接收器)以监听Wifi状态更改和移动状态更改,并检查所需的状态。我在下面添加了状态检查方法。
接收器实现
检查接收器中的更改,然后检查状态。
public class Internet_State extends BroadcastReceiver {
public boolean oldInternetState;
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
Bundle b = intent.getExtras();
boolean isConnected = !b
.getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY);
if (oldInternetState == isConnected)
return;
oldInternetState = isConnected;
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
int state = isConnected?1:0;
if(state)
state = checkState(context)
intent.putExtra("state", state);
}
@Override
public void initialize(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
oldInternetState = false;
if (activeNetwork != null)
oldInternetState = activeNetwork.isConnectedOrConnecting();
}
}
实现两个广播接收器,分别用于监听手机和Wi-Fi状态的改变,并添加一个如下所示的状态检查方法
检查状态
监测四种状态之一
public int checkState(Context context){
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;
boolean isWifi = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isAvailable();
int state = isConnected?1:0;
if(isWifi && isMobile)
state = 1;
else if(isWifi && !isMobile)
state = 2;
if(isMobile && isWifi)
state = 3;
else if(isMobile && !isWifi)
state = 4;
return state;
}
请将此方法从3个Wifi、Internet和移动数据更改接收器中调用,不要忘记检查旧状态并将其与更改后的状态进行匹配。
移动设备旧状态:
NetworkInfo allNetInfo = cm
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
oldDataState = allNetInfo.getState()
用于Wi-Fi状态
int state = intent.getExtras().getInt(WifiManager.EXTRA_WIFI_STATE);
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
if (state == oldWifiState)
return;
oldWifiState = state;
问题:我只能开启2到3次WiFi
由于操作系统触发了WiFi状态的变化,如打开和关闭WiFi,会导致多个WiFi更改调用。您需要取消它们,就像我上面所做的那样。
if (state == WifiManager.WIFI_STATE_ENABLED)
state = 1;
else if (state == WifiManager.WIFI_STATE_DISABLED)
state = 0;
else
return;
现在只监视启用和禁用状态。