Android 监听网络连接状态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiaoyaning1210/article/details/52525590

当然离不开广播

public class NetBroadcastReceiver extends BroadcastReceiver {

    public NetBroadcastReceiver() {
    }

    private NetContentListener netContentListener;

    @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()) {
            //改变背景或者 处理网络的全局变量
            netContentListener.netContent(false);
        } else {
            //改变背景或者 处理网络的全局变量
            netContentListener.netContent(true);
        }
    }

    public void setNetContentListener(NetContentListener netContentListener) {
        this.netContentListener = netContentListener;
    }

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

别忘了在清单文件里面注册

        <receiver
            android:name=".receiver.NetBroadcastReceiver"
            android:enabled="false"
            android:exported="false">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

要读取网络状态,还需要加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

最后就是在对于的地方注册广播进行监听

    //监听网络状态
    private void registerNetReceiver() {
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        NetBroadcastReceiver netBroadcastReceiver = new NetBroadcastReceiver();//这应该是个全局变量,为了方便观看,才写成了局部
        this.registerReceiver(netBroadcastReceiver, filter);
        netBroadcastReceiver.setNetContentListener(new NetBroadcastReceiver.NetContentListener() {
            @Override
            public void netContent(boolean isConnected) {
                if (isConnected) {
                    LogUtils.tag("main").i("网络连接");
                    layout_notconnet.setVisibility(View.GONE);
                } else {
                    LogUtils.tag("main").i("网络断开");
                    layout_notconnet.setVisibility(View.VISIBLE);
                }
            }
        });
    }

最后别忘记在activity关闭的时候把注册的广播给取消掉
“`
@Override
protected void onDestroy() {
super.onDestroy();
this.unregisterReceiver(netBroadcastReceiver);
}

猜你喜欢

转载自blog.csdn.net/jiaoyaning1210/article/details/52525590