X

你还在用静态广播CONNECTIVITY_CHANGE来监听网络状态变化?


一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现。 targetSdkVersion 升级到 24 后,发现静态注册广播的方式要被取消了。不过官方文档里还有另一种 方案,用 ConnectivityManager.NetworkCallback来监听网络。测试了一下,实时性和 BroadcastReceiver 一致。

对于兼容性,可以通过动态注册 BroadcastReceiver 继续使用,也可以判断 API 21 以下用 BroadcastReceiver ,高版本用 NetworkCallback。现在我们做项目一般都适配android5.0(API21)以上了,所以这里也不在最静态广播做使用说明了,使用也很简单,下边说说

ConnectivityManager.NetworkCallback的用法,用法也很简单 先上代码:
首先要声明一些权限:

1 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
3    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
4    <uses-permission android:name="android.permission.INTERNET" />


java代码:

 1 /**
2     * 初始化网络链接状态的监听 ,在没网络的时候提供更好的交互
3     */

4    void initNetworkInfoLis(){
5    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
6        ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
7        connectivityManager.requestNetwork(new NetworkRequest.Builder().
8                build(), new ConnectivityManager.NetworkCallback() {
9            @Override
10            public void onAvailable(Network network) {
11                super.onAvailable(network);
12//                LogUtil.i("网络链接"+ NetWorkUtils.ping());
13                handler.sendEmptyMessage(0);
14            }
15
16            @Override
17            public void onLost(Network network) {
18                super.onLost(network);
19//                LogUtil.i("网络断开"+NetWorkUtils.ping());
20                handler.sendEmptyMessage(1);
21            }
22        });
23    }

handler是通知界面改变的。

onAvailable方法是网络链接的回调,
onLost方法是网络断开的回调


判断当前的网络连接状态是否能用 比如一些需要登录的网络连接上没登录依然没法上网,
找一个一定可以访问的ping一下就行了,这里以 www.baidu.com做参考,所以即便在
onAvailable方法里也要ping一下。

                      喜欢 就关注吧,欢迎投稿!



本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/你还在用静态广播connectivity_change来监听网络状态变化?/
Categories: Android
admin: