android-实时监听网络变化的工具类

来源:互联网 发布:微信公众号开发框架php 编辑:程序博客网 时间:2024/05/29 16:23

1.实现逻辑

   广播监听网络变化,通过回调通知网络变化。

2.代码

public class NetChangeHelper {//private static final String TAG = NetChangeHelper.class.getSimpleName();private static final String RECEIVER_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";private static final int WHAT_NET_CHANGED = 0;private static final int TIME_NET_CHANGED = 2800;private Context mContext;private static NetChangeHelper sCheckNetChangeHelper;private BroadcastReceiver mNetReceiver;private Handler mHandler;private final Set<OnNetChangedListener> mListeners;private int mPreNetStatus;// 注册广播时会立马收到消息,这条消息不需要处理private boolean isFirstReceive = true;private NetChangeHelper(Context context) {this.mContext = context;initHandeler();initReceiver();mListeners = new HashSet<NetChangeHelper.OnNetChangedListener>();}public static NetChangeHelper getInstance(Context context) {if (sCheckNetChangeHelper == null) {init(context);}return sCheckNetChangeHelper;}private synchronized static void init(Context context) {if (sCheckNetChangeHelper == null) {sCheckNetChangeHelper = new NetChangeHelper(context);}}public void doCheck(OnNetChangedListener onNetChangedListener) {mListeners.add(onNetChangedListener);}private void initReceiver() {mNetReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {final String action = intent.getAction();if (RECEIVER_ACTION.equals(action)) {if (isFirstReceive) {isFirstReceive = false;return;}if (mHandler.hasMessages(WHAT_NET_CHANGED)) {int curNet = NetUtil.checkNet(context);if (curNet != mPreNetStatus) {mHandler.removeMessages(WHAT_NET_CHANGED);mHandler.sendEmptyMessageDelayed(WHAT_NET_CHANGED,TIME_NET_CHANGED);}} else {mPreNetStatus = NetUtil.checkNet(context);mHandler.sendEmptyMessageDelayed(WHAT_NET_CHANGED,TIME_NET_CHANGED);}}}};IntentFilter filter = new IntentFilter();filter.addAction(RECEIVER_ACTION);mContext.registerReceiver(mNetReceiver, filter);}private void initHandeler() {mHandler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {if (msg.what == WHAT_NET_CHANGED) {handle();}}};}private void handle() {callBack();}private void callBack() {Iterator<OnNetChangedListener> iterator = mListeners.iterator();while (iterator.hasNext()) {OnNetChangedListener netChangedListener = (OnNetChangedListener) iterator.next();if (netChangedListener != null) {netChangedListener.onNetChanged();}}}public interface OnNetChangedListener {void onNetChanged();}}
3.权限

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
4.使用

  4.1 实现OnNetChangedListener接口

  4.2 实现监听

// 监听网络变化NetChangeHelper.getInstance(mContext).doCheck(this);




0 0