一般监听网络变化是在 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来监听网络状态变化?/