Android监听网络状态变化与WIFI移动网的判别

有时我们需要随时判断网络连接状态并做出相应事件,像手机微信一样,在没有网络连接的时候,微信主界面会显示“当前无网络连接”的状态栏。

以我自己做的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网络而是处于移动网络
        }

    }
}


2.在需要监听网络变化状态的activity或fragment里:
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里注册一下:

        
            
                
            
        


我因为一开始这个没加导致一直出错。
<intent-filter>
    <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
intent-filter>


你可能感兴趣的:(Android监听网络状态变化与WIFI移动网的判别)