Android-网络监听

直接在BaseActivity中引下面代码:

private ConnectivityManager.NetworkCallback networkCallback;
private ConnectivityManager connectivityManager;



//网络监听
networkCallback = new NetworkCallbackImpl();
NetworkRequest.Builder builder = new NetworkRequest.Builder();
NetworkRequest request = builder.build();
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
connectivityManager.registerNetworkCallback(request, networkCallback);



private class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {

        /**
         * 网络可用的回调连接成功
         */
        @Override
        public void onAvailable(Network network) {
            super.onAvailable(network);
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    if (mNetErrorView != null) {
                        mNetErrorView.setVisibility(View.GONE);
                    }
                }
            });
        }

        /**
         * 实践中在网络连接正常的情况下,丢失数据会有回调
         */
        @Override
        public void onLosing(Network network, int maxMsToLive) {
            super.onLosing(network, maxMsToLive);
        }

        /**
         * 网络不可用时调用和onAvailable成对出现
         */
        @Override
        public void onLost(Network network) {
            super.onLost(network);
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    if (mNetErrorView != null) {
                        mNetErrorView.setVisibility(View.VISIBLE);
                    }
                }
            });
        }

    }

mNetErrorView 是无网络时显示的一个view,写一个这个view的布局net_status_bar.xml




    

    

再在需要用到网络监听的Activity中继承BaseActivity,再在当前Activity中

mNetErrorView = findViewById(R.id.net_status_bar_top);

最后在当前Activity的布局中适当的位置引入这个布局文件即可

到此就完成了实时网络监听

 

如果需要已进入就监听到网络,需要在BaseActivity的onResume中监听

 if (!NetUtil.isNetConnected(this)) {
            if (mNetErrorView != null) {
                mNetErrorView.setVisibility(View.VISIBLE);
            }
        } else {
            if (mNetErrorView != null) {
                mNetErrorView.setVisibility(View.GONE);
            }
        }

监听代码

public static boolean isNetConnected(Context context) {
        boolean isNetConnected;
        // 获得网络连接服务
        ConnectivityManager connManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connManager.getActiveNetworkInfo();
        if (info != null && info.isAvailable()) {
//			String name = info.getTypeName();
            isNetConnected = true;
        } else {
            isNetConnected = false;
        }
        return isNetConnected;
    }

再在onDestroy中取消注册

connectivityManager.unregisterNetworkCallback(networkCallback);

上面代码中所需要的一些尺寸,图片等可以自行先随意设置,先看效果,后期可换成项目所需的对应资源

 

 

最近自己写了一个小程序,大家可以关注一下,附带源码

Android-网络监听_第1张图片

搬砖之余看个电影放松,扫码关注,最新,最全的各种影视资源,省去各种VIP,直接观看,你值得拥有

Android-网络监听_第2张图片

 

你可能感兴趣的:(Android)