有时我们需要随时判断网络连接状态并做出相应事件,像手机微信一样,在没有网络连接的时候,微信主界面会显示“当前无网络连接”的状态栏。
以我自己做的APP为例。
1.先写BroadcastReceiver
public class NetWorkChangeBroadcastReceiver extends BroadcastReceiver {
public static final String NET_CHANGE = "net_change";
//标记当前网络状态,0为无可用网络状态,1表示有。
public static final String NET_TYPE = "net_type";
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//移动数据
NetworkInfo mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
//wifi网络
NetworkInfo wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
// 网络状态全部不可用
Intent netIntent = new Intent(NET_CHANGE);
netIntent.putExtra(NET_TYPE,0);
context.sendBroadcast(netIntent);
return;
}
if(mobNetInfo.isConnected() || wifiNetInfo.isConnected()){
Intent netIntent = new Intent(NET_CHANGE);
netIntent.putExtra(NET_TYPE,1);
context.sendBroadcast(netIntent);
return;
}
if(mobNetInfo.isConnected()&&!wifiNetInfo.isConnected()){
// 手机没有处于wifi网络而是处于移动网络
}
}
}
private BroadcastReceiver netReceiver;
然后:
// 监听广播
private void initReceiver() {
netReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 判断当前网络状态
if(intent.getIntExtra(NetWorkChangeBroadcastReceiver.NET_TYPE,0)==0){
// 0表示无网络连接,
//这里填你想要执行的东西
}else {
// 1表示有
//动作2
}
}
};
IntentFilter filter = new IntentFilter(NetWorkChangeBroadcastReceiver.NET_CHANGE);
getActivity().registerReceiver(netReceiver,filter);
}
3.在manifest里注册一下:
<receiver android:name=".common.NetWorkChangeBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
我因为一开始这个没加导致一直出错。
<intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter>