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

640?wx_fmt=png

    

    一般监听网络变化是在 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方法是网络断开的回调


640?wx_fmt=png

640?wx_fmt=png

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

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

640?wx_fmt=jpeg



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值