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里注册一下:

        <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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值