NetworkChangeReceiver
一个通用的监听网络状态的广播接收器:
可以在Application类中onCreate注册:
private void registerNetReceiver() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
NetworkChangeReceiver networkReceiver=new NetworkChangeReceiver();
registerReceiver(networkReceiver(), filter); //注册,添加要监听的action/filter
}
在活动中注册时在onDestroy注销:
unregisterReceiver(networkReceiver);
networkInfo.isAvailable()==true时表示有网
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;
//import org.greenrobot.eventbus.EventBus;
public class NetworkChangeReceiver extends BroadcastReceiver {
private static final String TAG = "NetReceiver";
private boolean isInit = false;
@Override
public void onReceive(Context context, Intent intent) {
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
if(!isInit){
isInit = true;
return;
}
ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) { //有网
Log.i(TAG, "net connected");
//EventBus.getDefault().post(new NetEventMessage(networkInfo));
}else{ //没网
// EventBus.getDefault().post(new NetEventMessage(null));
}
}
}
}
最后,访问系统网络状态要在manifest中声明权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />