开源框架推荐:网速监听—facebook/network-connection-class

来源:互联网 发布:肯尼迪遇刺档案 知乎 编辑:程序博客网 时间:2024/06/02 04:33

前言

昨天发生了一点小插曲,首次使用litepal(数据库框架)竟然没有建表,结果最后发现原因是:之前是afinal,版本号为1,现在使用litepal,如果数据库的名称一样,不提升版本号 是无法建表的,在这里也是提醒同样使用litepal的朋友,别跟我犯同样的错误。

这也是要临近下班的时间了,准备给大家推荐一款很使用的开源框架:Facebook开源的network-connection-class,检测手机的网络情况。

https://github.com/facebook/network-connection-class/

正文

公司项目想要添加一个功能:根据用户手机的网速播放不同清晰度的视频。这个在现在的各大视频站实在是太常见了,根据网络情况自动匹配清晰度对应的视频,也可以让用户自己去切换,是个不错的用户体验。

要实现这样的功能首先要需要当前的网络情况才行,首先看看如何使用network-connection-class:

1、依赖compile ‘com.facebook.network.connectionclass:connectionclass:1.0.1’

2、定义网络变化的监听Listener

public interface ConnectionClassStateChangeListener {  public void onBandwidthStateChange(ConnectionQuality bandwidthState);}

其中bandwidthState就是当前的网络情况,在sdk中会把网速分为几个类型:

public enum ConnectionQuality {  /**   * Bandwidth under 150 kbps.   */  POOR,  /**   * Bandwidth between 150 and 550 kbps.   */  MODERATE,  /**   * Bandwidth between 550 and 2000 kbps.   */  GOOD,  /**   * EXCELLENT - Bandwidth over 2000 kbps.   */  EXCELLENT,  /**   * Placeholder for unknown bandwidth. This is the initial value and will stay at this value   * if a bandwidth cannot be accurately found.   */  UNKNOWN}

要注意的就是 UNKNOWN,注释已经写得很清楚, UNKNOWN是默认值直到没有精确的找到网络。

你也可以主动去查询当前的网络情况:

ConnectionQuality cq = ConnectionClassManager.getInstance().getCurrentBandwidthQuality();

3、设置监听的时机

ConnectionClassManager.getInstance().register(mListener);

跟广播类似,有注册就一定需要解绑,千万不要忘了。

4、开始采集网速和停止采集网速

DeviceBandwidthSampler.getInstance().startSampling();// Do some downloading tasksDeviceBandwidthSampler.getInstance().stopSampling();

注册了监听,并不会马上就能得到网络的情况,需要去开启采集,并且开启后去做一些网络操作,例如下载,在不需要采集手机网速的时候去关闭采集。掌握好恰当的时机,对于手机的消耗肯定是有好处的。

以我最开始的功能为例,我可以把需求分几个阶段:

1、先设置一个播放路径,等到有网速结果回调的时候立刻去设置对应的路径并seek到指定的位置。
2、如果网络变差,我可以提示用户是否要切换到低分辨率的视频。
3、等视频播放结束,关闭网速检测。

如果你有下载过什么,并且知道下载了多长,也可以直接去计算当前的网络情况:

ConnectionClassManager.addBandwidth(bandwidth, time);

如果网络有变化,会直接回调设置的listener。

总结

ok,是不是非常的简单,又了解了一个新的框架,以后遇到这种跟网络有关的需求,就不用蛋疼了。

下班了,拜拜。