Android 网络改变监听

本文介绍了一个用于监听Android设备网络状态变更的工具类,包括Wi-Fi、移动数据和无网络状态的变化,并通过发送自定义广播进行相应处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) {
	}

}

这个工具类没什么好介绍的,会写广播的基本都看得懂,这个工具类可直接拿去用,谢谢各位~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值