(三)高级篇____3、优化电池使用时间——确定和监控网络连接状态
原文链接:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
作者:cdkd123
完成时间:
确定和监控网络连接状态
有些应用需要联网,例如设定重复闹铃,更新后台服务,最通常的做法是定期联网,用网上资源、缓存数据或运行一个下载任务(下载数据)来更新应用。但是如果手机没联网,或者网速超慢,就没必要执行这些任务。
我们可以使用ConnectivityManager检查是否联网以及当前是何种类型的网络。
确定是否已连接互联网
没有网络完全没必要启动那些需要联网的任务。下面这段代码演示ConnectivityManager如何检测联网:
ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork.isConnectedOrConnecting();
确定网络的类型
我们可以(通过ConnectivityManager)判断当前可用网络的类型,通过移动网络, WiMAX, Wi-Fi, 以太网等这些方式都可以实现设备联网, 查询当前联网的类型,你就可以做出适当的诀择。
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
移动网络比Wi-Fi消耗更多,所以,多数情况下,你的应用应该在有移动网络时下载更新尽量少些,而有wifi时再下载大文件就比较划算一些,一旦网络重新连接, 而且网络比较好(wifi),如果之前暂停了一些联网操作,这时就应该重新启动这个操作。
监听网络连接的改变
任何时候网络连接发生一丁点的变化,ConnectivityManager都会发送广播CONNECTIVITY_ACTION (在manifest里配置,代码如下)。你可以在配置文件Manifest里注册一个broadcast receiver,用它来监听这些变化,在后台重启需要下载的联网操作。
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
1.通常网络的改变会比较频繁,我们没有必要不间断的注册监听网络的改变。
2.通常我们会在有Wi-Fi的时候进行下载动作,若是网络切换到移动网络则通常会暂停当前下载,监听到恢复到Wi-Fi的情况则开始恢复下载。(也就是说为了完成某个单元操作而进行监测)
这个技术需要在manifest中声明broadcast receivers,我们下节课会详细描述。

浙公网安备 33010602011771号