美文网首页基础知识
Android即时网络监听(二)-ConnectivityMan

Android即时网络监听(二)-ConnectivityMan

作者: 面条不放面 | 来源:发表于2019-06-13 18:49 被阅读0次

在上一篇文章Android即时网络监听(一)-BroadcastReceiver中,我们介绍了使用BroadcaastReceiver进行网络连接变化监听,虽然广播使用方便,但随着安卓的版本迭代,在权限上越来越谨慎,以及为了用户体验上的优化,广播就显得有点Low,所以我们本片,哦不,本文的主角就登场了:ConnectivityManager.NetworkCallback,关于它的具体描述,详见官方文档,下面我们来看一下具体使用。
1、新建NetworkCallbackImpl类继承ConnectivityManager.NetworkCallback,并重写onAvailable、onLost、onCapabilitiesChanged三个方法:

@Override
public void onAvailable(Network network) {
    super.onAvailable(network);
    Log.d(TAG, "onAvailable: 网络已连接");
}

@Override
public void onLost(Network network) {
    super.onLost(network);
    Log.e(TAG, "onLost: 网络已断开");
}

@Override
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
    super.onCapabilitiesChanged(network, networkCapabilities);
    if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
        if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            Log.d(TAG, "onCapabilitiesChanged: 网络类型为wifi");
            post(NetType.WIFI);
        } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
            Log.d(TAG, "onCapabilitiesChanged: 蜂窝网络");
            post(NetType.CMWAP);
        } else {
            Log.d(TAG, "onCapabilitiesChanged: 其他网络");
            post(NetType.AUTO);
        }
    }
}

2、注册NetworkCallbackImpl:

NetworkCallbackImpl networkCallback = new NetworkCallbackImpl();
NetworkRequest.Builder builder = new NetworkRequest.Builder();
NetworkRequest request = builder.build();
ConnectivityManager connMgr = (ConnectivityManager) NetworkListener.getInstance().getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr != null) {
    connMgr.registerNetworkCallback(request, networkCallback);
}

做完以上两步之后,运行代码,不出意外的话,网络状态改变就可以正常检测出来了,其余使用方法由于上一篇文章已经写明,本文就不再赘述,需要的童鞋可参考上一篇文章。
PS:本文为某平台公开课笔记,在此记录下,文中实现还可以再次进行优化。
代码详见Demo
另附上一篇文章链接Android即时网络监听(一)-BroadcastReceiver

相关文章

网友评论

    本文标题:Android即时网络监听(二)-ConnectivityMan

    本文链接:https://www.haomeiwen.com/subject/wlpzxctx.html