在使用广播BroadCatsReceiver监听网络状态变化时会碰到这样的问题,在遇到网络变化时会多次执行onReceive,导致接收到多个相同的广播,下面就这个问题进行分析和提出解决办法。
首先,写一个网络工具类,这个类主要是获取网络连接状态,是WiFi、数据网络还是无网络,代码如下:
public class NetUtils {
private static final int NETWORK_NONE=-1; //无网络连接
private static final int NETWORK_WIFI=0; //wifi
private static final int NETWORK_MOBILE=1; //数据网络
public static int getNetWorkState(Context context){
ConnectivityManager connectivityManager=(ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
if(activeNetworkInfo!=null&&activeNetworkInfo.isConnected()){
if(activeNetworkInfo.getType()==(ConnectivityManager.TYPE_WIFI)){
return NETWORK_WIFI;
}else if(activeNetworkInfo.getType()==(ConnectivityManager.TYPE_MOBILE)){
return NETWORK_MOBILE;
}
}else{
return NETWORK_NONE;
}
return NETWORK_NONE;
}
}
通常我们使用广播监听网络状态变化的方式如下:
public class NetReceiver extends BroadcastReceiver {
private static final String TAG="NetReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){
final int netWorkState=NetUtils.getNetWorkState(context);
if(netWorkState==0){
Toast.makeText(context, "wifi&#