(三)高级篇____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,我们下节课会详细描述。

posted @ 2014-07-31 10:05  ╰→劉じ尛鶴  阅读(115)  评论(0)    收藏  举报