package org.cuieney.videolife.common.net;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import java.util.ArrayList;
/**
*
*
* @项目名称:ZwUtils
* @类名称:NetworkStateReceiver
* @类描述: 是一个检测网络状态改变的,需要配置 <receiver
* android:name="com.lidroid.zutils.http.netstate.NetworkStateReceiver" >
* <intent-filter> <action
* android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action
* android:name="android.gzcpc.conn.CONNECTIVITY_CHANGE" />
* </intent-filter> </receiver>
*
* 需要开启权限 <uses-permission
* android:name="android.permission.CHANGE_NETWORK_STATE" />
* <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
* <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
* /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
* />
*
*/
public class NetworkStateReceiver extends BroadcastReceiver {
private static Boolean networkAvailable = false;
private static NetWorkUtil.NetType netType;
private static ArrayList<NetChangeObserver> netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
private final static String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
private static BroadcastReceiver receiver;
/**
*
* @Title: getReceiver
* @说 明:获得广播实例
* @参 数: @return
* @return BroadcastReceiver 返回类型
* @throws
*/
private static BroadcastReceiver getReceiver() {
if (receiver == null) {
receiver = new NetworkStateReceiver();
}
return receiver;
}
@Override
public void onReceive(Context context, Intent intent) {
receiver = NetworkStateReceiver.this;
if (intent.getAction().equalsIgnoreCase(ANDROID_NET_CHANGE_ACTION)) {
if (!NetWorkUtil.isNetworkAvailable(context)) {
netType = NetWorkUtil.getNetworkType(context);
networkAvailable = false;
} else {
netType = NetWorkUtil.getNetworkType(context);
networkAvailable = true;
}
notifyObserver();
}
}
/**
* 注册网络状态广播
*
* @param mContext
*/
public static void registerNetworkStateReceiver(Context mContext) {
IntentFilter filter = new IntentFilter();
filter.addAction(ANDROID_NET_CHANGE_ACTION);
mContext.getApplicationContext().registerReceiver(getReceiver(), filter);
}
/**
* 检查网络状态
*
* @param mContext
*/
public static void checkNetworkState(Context mContext) {
Intent intent = new Intent();
mContext.sendBroadcast(intent);
}
/**
* 注销网络状态广播
*
* @param mContext
*/
public static void unRegisterNetworkStateReceiver(Context mContext) {
if (receiver != null) {
try {
mContext.getApplicationContext().unregisterReceiver(receiver);
} catch (Exception e) {
}
}
}
/**
* 获取当前网络状态,true为网络连接成功,否则网络连接失败
*
* @return
*/
public static Boolean isNetworkAvailable() {
return networkAvailable;
}
public static NetWorkUtil.NetType getAPNType() {
return netType;
}
private void notifyObserver() {
for (int i = 0; i < netChangeObserverArrayList.size(); i++) {
NetChangeObserver observer = netChangeObserverArrayList.get(i);
if (observer != null) {
if (isNetworkAvailable()) {
observer.onConnect(netType);
} else {
observer.onDisConnect();
}
}
}
}
/**
* 注册网络连接观察者
*
* @param observer
* observer
*/
public static void registerObserver(NetChangeObserver observer) {
if (netChangeObserverArrayList == null) {
netChangeObserverArrayList = new ArrayList<NetChangeObserver>();
}
netChangeObserverArrayList.add(observer);
}
/**
* 注销网络连接观察者
*
* @param observer
* observerKey
*/
public static void removeRegisterObserver(NetChangeObserver observer) {
if (netChangeObserverArrayList != null) {
netChangeObserverArrayList.remove(observer);
}
}
}