您的位置:首页 > 理论基础 > 计算机网络

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

2014-11-17 10:57 417 查看
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() {

@Override
public 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()) {
@Override
public 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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: