Android 实现网络改变监听,在我们用手机的时候,有时候需要切换网络,有时候在无线网络环境中,从流量状态下切换成wifi连接;而有时候在没有无线网络环境的地方,从wifi连接切换到流量连接,这时候app上的数据就需要判断了,如果在下载东西的情况下,一监听从wifi连接切换到流量连接的情况下,那么久应该停止下载,并提示用户是否继续用流量下载
所以网络改变的监听是从用户的角度去考虑的,当然我们自己有时候也需要用到,具体实现是监听系统发送的广播,而我的操作是监听到网络改变后,根据改变后的连接方式发送不同的广播出去,算是一个分发处理。
下面这个就是我自己定义的工具类:
老规矩,包名自己加入自己app的包名
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.text.TextUtils;
import com.storey.utils.LogUtil;
/**
* @author Voctex 2015-07-28
* @param if the network connectivity changed,this broadcast can receicer the
* intent,and deal with it
*
*/
public class ConnectChangeBroad extends BroadcastReceiver {
private final static String WIFI_STATUS = "wifi_status";
private final static String MOBAIL_STATUS = "mobail_status";
private final static String NONET_STATUS = "nonet_status";
private String networkStatus = NONET_STATUS;
private String beforeStatus = NONET_STATUS;
/**
* @author Voctex 2015-07-28
* @param All
* the network status
*/
private enum InfcEnum {
wifiE, mobailE, nonetE;
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if (TextUtils.equals(action, ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobNetInfo != null && !mobNetInfo.isConnected()
&& wifiNetInfo != null && !wifiNetInfo.isConnected()) {
// 没有网络时走这里
networkStatus = NONET_STATUS;
if (!TextUtils.equals(beforeStatus, networkStatus)) {
beforeStatus = networkStatus;
LogUtil.i("监听:没网了");
sendBroadCastByNet(context, InfcEnum.nonetE);
}
} else {
// 这里是有网络的情况下才走这里的
if (mobNetInfo != null && mobNetInfo.isConnected()) {
networkStatus = MOBAIL_STATUS;
if (!TextUtils.equals(beforeStatus, networkStatus)) {
beforeStatus = networkStatus;
LogUtil.i("监听:有网了,移动数据");
sendBroadCastByNet(context, InfcEnum.mobailE);
}
}
if (wifiNetInfo != null && wifiNetInfo.isConnected()) {
networkStatus = WIFI_STATUS;
if (!TextUtils.equals(beforeStatus, networkStatus)) {
beforeStatus = networkStatus;
LogUtil.i("监听:有网了,wifi");
sendBroadCastByNet(context, InfcEnum.wifiE);
}
}
}
} else {
LogUtil.i("监听到的是非网络变化");
}
}
private void sendBroadCastByNet(Context mContext, InfcEnum ie) {
switch (ie) {
case wifiE://
sendBroadCast(mContext);
break;
case mobailE://
sendBroadCast(mContext);
break;
case nonetE:
break;
default:
break;
}
}
private void sendBroadCast(Context mContext) {
}
}
这个工具类没什么好介绍的,会写广播的基本都看得懂,这个工具类可直接拿去用,谢谢各位~~~