Android 监听网络连接状态

本文介绍了一种在Android设备上监听网络状态变化的方法,包括网络连接和断开。通过使用BroadcastReceiver和ConnectivityManager,可以实时获取WIFI和移动网络的连接状态,并在Activity中动态注册以实现网络状态的监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android手机在网络状态发生改变的时候回发送一条广播。通过日志打印,可以看到该条广播的Action为:android.net.conn.CONNECTIVITY_CHANGE,但是在网络断开和连接的时候或者由WIFI转为移动网络的时候发送的广播的Action同为上述的Action,那么我们如何知道当前是网络连接还是断开呢?接下来我们就会用到ConnectivityManager这个类,ConnectivityManager可以通过获取系统Service获得:

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

通过connectivityManager又可以获得WIFI网络或者移动网络的连接状态

NetworkInfo mobileInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

因此,我们可以自定义一个BroadcastReceiver,监听到网络状态后通过接口将该状态对外暴露出去

public class NetBroadcastReceiver extends BroadcastReceiver {

    private NetConnectedListener netConnectedListener;
    
    @Override
    public void onReceive(Context context, Intent intent) {
    
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        
        NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
            //WIFI和移动网络均未连接
            netContentListener.netContent(false);
           
        } else {
            //WIFI连接或者移动网络连接
            netContentListener.netContent(true);
        }

    }

    public void setNetConnectedListener(NetConnectedListener netConnectedListener) {
        this.netConnectedListener = netConnectedListener;
    }

    public interface NetConnectedListener {
        void netContent(boolean isConnected);
    }

}

然后在需要监听此状态的Activity中动态注册该BroadcastReceiver即可

NetBroadcastReceiver receiver = new NetBroadcastReceiver();

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        this.registerReceiver(receiver, filter);
        
receiver.setNetContentListener(new NetBroadcastReceiver.NetContentListener() {
            @Override
            public void netContent(boolean isConnected) {
               		 //在此处处理具体业务即可
            }
        });
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值