当我们想要更改后台数据的刷新速率来减少对用户影响的时候,先检测下当前的剩余电量和充电状态是个不错的开始。

在执行更新数据操作对用户电池寿命的影响取决于当前的剩余电量和充电状态。当设备在通过交流电充电的时候去更新数据对设备电池寿命的影响是微不足道的,所以在大部分情况下当设备在使用交流电充电的时候,您都可以最大化您的数据更新频率。相反的,如果设备没有在充电,减少更新速率会延长设备电池的使用寿命。

同样,您还可以检测电池电量信息,当剩余电量很少的时候,您可以减少更新频率 甚至停止更新。

检测当前的充电状态

BatteryManager 会广播所有的电池和充电详细信息,通过 Intent 可以获取这些状态。

由于这是个密集型(sticky)通知,所以您不需要注册一个 BroadcastReceiver,只要简单的调用 registerReceiver 该函数并设置参数为 null 即可获得到包含了电池信息的Intent,当然您也可以设置一个 BroadcastReceiver 对象作为参数,我们会在后面小节中看到这种情况,暂时我们先设置其为null吧, 代码如下:

Java
1
2

IntentFilter ifilter = new IntentFilter ( Intent . ACTION_BATTERY_CHANGED ) ;
Intent batteryStatus = context . registerReceiver ( null , ifilter ) ;

如果当前设备正在充电的话,您还可以获取具体的充电方式 — 通过USB或者交流电充电:

Java
1
2
3
4
5
6
7
8
9

// Are we charging / charged?
int status = batteryStatus . getIntExtra ( BatteryManager . EXTRA_STATUS , - 1 ) ;
boolean isCharging = status == BatteryManager . BATTERY_STATUS_CHARGING ||
                     status == BatteryManager . BATTERY_STATUS_FULL ;
// How are we charging?
int chargePlug = battery . getIntExtra ( BatteryManager . EXTRA_PLUGGED , - 1 ) ;
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB ;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC ;

当设备在使用交流电充电的时候,您可以最大化数据更新频率;如果在使用USB充电,您应该减少更新频率;如果没有在充电 更新频率应该更小。

检测充电状态的改变

设备是否充电是经常发生的,所以根据设备是否充电来修改更新频率是非常重要的。

无论设备充电或者停止充电 BatteryManager 都会广播一个消息。即使您的程序没有正在运行也应该监听这个事件,这样您可以根据不同的状态来判断是否需要启动后台更新程序。您可以在Manifest文件中注册一个同时监听 ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED 消息的 BroadcastReceiver 。

Java
1
2
3
4
5
6

< receiver android : name = ".PowerConnectionReceiver" >
   < intent - filter >
     < action android : name = "android.intent.action.ACTION_POWER_CONNECTED" / >
     < action android : name = "android.intent.action.ACTION_POWER_DISCONNECTED" / >
   < / intent - filter >
< / receiver >

在这个 BroadcastReceiver 实现中,可以查询当前的状态。

Java
1
2
3
4
5
6
7
8
9
10
11
12

public class PowerConnectionReceiver extends BroadcastReceiver {
     @Override
     public void onReceive ( Context context , Intent intent ) {
         int status = intent . getIntExtra ( BatteryManager . EXTRA_STATUS , - 1 ) ;
         boolean isCharging = status == BatteryManager . BATTERY_STATUS_CHARGING ||
                             status == BatteryManager . BATTERY_STATUS_FULL ;
    
         int chargePlug = intent . getIntExtra ( BatteryManager . EXTRA_PLUGGED , - 1 ) ;
         boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB ;
         boolean acCharge = chargePlug == BATTERY_PLUGGED_AC ;
     }
}

检测当前剩余电量

有些情况下根据当前剩余电量做些改动也是有用的。当电量低于一定值的时候可以修改后台数据的更新频率。

您可以通过如下示例代码来获取剩余电量信息:

Java
1
2
3
4

int level = battery . getIntExtra ( BatteryManager . EXTRA_LEVEL , - 1 ) ;
int scale = battery . getIntExtra ( BatteryManager . EXTRA_SCALE , - 1 ) ;
float batteryPct = level / ( float ) scale ;

检测明显的电量改变

你无法很轻松的检查连续的电池状态改变,而且您也无需这么做。

一般来说,联系的检查电量信息可能比您后台更新数据还要费电,所以只监听一些重要的电量状态比较有意义,例如监听合适设备进入或者离开低电状态。

下面的示例代码中的Receiver只监听设备进入低电状态或者离开低电状态的变化;使用了 ACTION_BATTERY_LOW 和 ACTION_BATTERY_OKAY 这两个Intent过滤器。

Java
1
2
3
4
5
6

< receiver android : name = ".BatteryLevelReceiver" >
< intent - filter >
   < action android : name = "android.intent.action.ACTION_BATTERY_LOW" / >
   < action android : name = "android.intent.action.ACTION_BATTERY_OKAY" / >
   < / intent - filter >
< / receiver >

一般来说,当电量极其少的时候,关闭后台数据更新是个不错的做法。当用户没电关机了您的数据再新都没有意义哇。

有些情况下设备会放到底座上使用,下节课程会讲述如何判断当前的底座状态以及检测底座的变化。

Read more: http://blog.chengyunfeng.com/?p=274#ixzz4SiTcekUp

检测电池电量和充电状态相关推荐

  1. Android 优化电池使用时间 ——监控电池电量和充电状态

    时常看Android官网开发文档,最近突然发现Android官网提供了一些中文翻译文档,真心感觉不错.考虑很大一部分童鞋都生活在大中华局域网里,不能畅游世界,特转载相关系列文档,以供大家一起学习,原文 ...

  2. Android官方开发文档Training系列课程中文版:电池续航时间优化之监测电池电量及充电状态

    原文地址:http://android.xsoftlab.net/training/monitoring-device-state/index.html 引言 作为一款优秀的APP应用,应该总是想方设 ...

  3. 监控电池电量和充电状态

    如果您要更改后台更新频率,从而减少更新对电池使用时间的影响,最好先查看当前的电池电量和充电状态. 对应用进行更新会影响电池使用时间,具体取决于设备的电池电量和充电状态.如果用户正在通过交流电源为设备充 ...

  4. Android监控电池电量和充电状态

    确定当前充电状态 首先,确定当前充电状态.BatteryManagerBatteryManagerBatteryManager 会在一个包含充电状态的粘性 Intent 中广播所有电池和充电详情. 由 ...

  5. android监测电池的电量与充电状态

    转 原文:http://developer.android.com/training/monitoring-device-state/battery-monitoring.html http://hu ...

  6. android充电状态广播,教学--监测电池的电量与充电状态

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 当你想通过改变后台更新操作的频率来减少对电池寿命的影响,那么首先需要检查当前电量与充电状态. 电池的电量与是否在充电状态会影响到一个程序去执行更新的操作. ...

  7. Android开发:优化电池续航-监听电量和充电状态

    当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始. 电池寿命通过剩余电量和充电状态来影响应用更新的执行.当用交流电充电时,执行更新操作对设备的影响是微不足道 ...

  8. Unity简单实现电量、充电状态显示

    简介: 很多游戏内都有显示当前网络.Ping值.电量.充电状态等需求,Unity给我们提供了丰富的API,可以简单实现这些功能. 在使用Ping类和FPSManager实现了对网络状态和fps状态的显 ...

  9. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )

    文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...

最新文章

  1. 《UML大战需求分析》阅读笔记1
  2. Cannot input a tensor of dimension other than 0 as a scalar argument
  3. Creating-Observables
  4. 【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )
  5. prometheus连续查询_Grafana + Prometheus快速搭建监控平台
  6. java互联网架构师入门进阶之路
  7. jQuery Mobile中主题theme样式a-z
  8. 投稿Springer旗下某中科院1区TOP期刊时间记载
  9. mysql dump hbase_mysqldump 导出部分数据库
  10. 啡鸟集:什么样的咖啡豆,才是好的咖啡豆?
  11. jQuery基础--使用jQuery美化英雄联盟简介页
  12. java写培根披萨和海鲜披萨_培根海鲜披萨的做法【图解】_培根海鲜披萨的家常做法_培根海鲜披萨怎么做_下午茶...
  13. Java并发包中常用类
  14. 项目需求分析和项目可行性
  15. 运营商业务系统基于 KubeSphere 的容器化实践
  16. 尚书视频群活动:投资分析师笔试题
  17. 程序员成长之旅——Delphi实现一个简单的科学计算器
  18. kendoui grid lov增强
  19. Python 使用pyplot画图
  20. VC++ 获取Windows系统开机时间

热门文章

  1. 2020.04.01 【ABAP随笔】- ABAP面试分享
  2. 【力扣】买卖股票的最佳时机 II
  3. 渗透测试工程师(NISP-PT)与网络安全运维工程师(NSP-SO)
  4. Android中字母大小写切换的快捷键
  5. 云从科技上市后首份财报:半年营收3.9亿 同比降14% 净亏3.25亿
  6. Android优雅的ui倒计时,Hurry - 一款颜值超高的日历+倒计时 APP - Android 应用 - 生活 - 【最美应用】...
  7. 使用Jetpack Compose竟能做出如此漂亮的倒计时APP
  8. php编写六十甲子纳音表_六十甲子纳音表
  9. 生活随记-冬天的馈赠
  10. mysql数据库加锁语句_sql语句对数据库表进行加锁和解锁