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

作者:

完成时间:

如果您要更改后台更新频率,从而减少更新对电池使用时间的影响,最好先查看当前的电池电量和充电状态。

对应用进行更新会影响电池使用时间,具体取决于设备的电池电量和充电状态。如果用户正在通过交流电源为设备充电,更新应用的影响就可以忽略不计。因此,在大多数情况下,只要设备连接了充电器,您就可以最大程度地提高刷新频率。相反,如果设备在消耗电池电量,那么降低更新频率就可以延长电池使用时间。

同样,您也可以查看电池电量,如果电量即将耗尽,您就可以降低更新频率,甚至停止更新。

确定当前的充电状态


请先确定当前的充电状态。BatteryManager 会通过一个包含充电状态的持续 Intent 广播所有的电池详情和充电详情。

由于这是个持续 intent,因此您无需通过将传入 null 的 registerReceiver 作为接收器直接调用(如下一代码段所示)来注册 BroadcastReceiver,系统会返回当前电池状态 intent。您可以在此处传入实际的 BroadcastReceiver 对象,不过我们会在下文中介绍如何处理更新,因此您不一定要执行此操作。

1
2

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

如果设备正在充电,则您可以提取当前的充电状态和充电方式(无论是通过 USB 还是交流充电器),如下所示:

1
2
3
4
5
6
7
8
9

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

通常,如果设备连接了交流充电器,您就应最大程度地提高后台更新频率;如果设备通过 USB 充电,请降低更新频率;如果电池在耗电,请进一步降低更新频率。

监控充电状态的变化


充电状态的改变就像设备连接电源那样容易,因此监控充电状态的变化并相应地调整刷新频率就很重要了。

只要设备连接或断开电源,BatteryManager 就会广播相应的操作。即使您的应用没有运行,也请务必接收这些事件,尤其是当这些事件会影响您启动应用以执行后台更新的频率时。因此,您应该通过在 intent 过滤器中定义 ACTION_POWER_CONNECTED 和 ACTION_POWER_DISCONNECTED,在清单中注册 BroadcastReceiver 来侦听这两个事件。

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 时,您可以按上一步骤所述提取当前的充电状态和充电方式。

 123456789
10
11
12

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

确定当前的电池量


在某些情况下,确定当前的电池电量会对您有所帮助。如果电池电量低于一定水平,您可以降低后台更新频率。

您可以从电池状态 intent 中提取要了解的当前电池电量以及电池容量,具体如下所示:

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;

监控电池电量的显著变化


您无法轻松地对电池状态进行持续监控,不过也无需这么做。

一般来说,与应用的正常行为相比,持续监控电池电量会消耗更多电量。因此,比较合适的做法是只监控电池电量的显著变化(尤其是在设备进入或结束低电量状态的情况下)。

以下清单代码段提取自广播接收器中的 intent 过滤器元素。通过侦听 ACTION_BATTERY_LOW 和 ACTION_BATTERY_OKAY,只要设备的电池进入或结束低
电量状态,系统就会触发接收器。

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>

如果电池电量极低,通常比较合适的做法是停用所有后台更新。如果您还没用上更新的数据,手机就自动关机了,那这些数据再新也没有意义。

在很多情况下,将设备插入基座就可以为其充电。下一教程将向您介绍如何确定当前基座状态及如何监控设备对接的变化。

转自:http://wiki.eoe.cn/page/Monitoring_the_Battery_Level_and_Charging_State.html

==============================================================

当手机电量有变化,或者有充电情况的时候,android会自动的发送一个广播,要监视充电情况,只需截获这个广播就ok啦!
废话不想说的太多,查看了android的源代码才发现原来是这样实现的。

  1. /**
  2. * 先声明一个 IntentFilter 对象
  3. */
  4. private IntentFilter   mIntentFilter;
  5. public void onCreate(Bundle savedInstanceState)
  6. {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.main);
  9. mIntentFilter = new IntentFilter();
  10. mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
  11. }
  12. protected void onResume()
  13. {
  14. super.onResume();
  15. // 注册消息处理器
  16. registerReceiver(mIntentReceiver, mIntentFilter);
  17. }
  18. //声明消息处理过程
  19. private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
  20. @Override
  21. public void onReceive(Context context, Intent intent) {
  22. String action = intent.getAction();
  23. //要看看是不是我们要处理的消息
  24. if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
  25. //电池电量,数字
  26. Log.d("Battery", "" + intent.getIntExtra("level", 0));
  27. //电池最大容量
  28. Log.d("Battery", "" + intent.getIntExtra("scale", 0));
  29. //电池伏数
  30. Log.d("Battery", "" + intent.getIntExtra("voltage", 0));
  31. //电池温度
  32. Log.d("Battery", "" + intent.getIntExtra("temperature", 0));
  33. //电池状态,返回是一个数字
  34. // BatteryManager.BATTERY_STATUS_CHARGING 表示是充电状态
  35. // BatteryManager.BATTERY_STATUS_DISCHARGING 放电中
  36. // BatteryManager.BATTERY_STATUS_NOT_CHARGING 未充电
  37. // BatteryManager.BATTERY_STATUS_FULL 电池满
  38. Log.d("Battery", "" + intent.getIntExtra("status",BatteryManager.BATTERY_STATUS_UNKNOWN));
  39. //充电类型 BatteryManager.BATTERY_PLUGGED_AC 表示是充电器,不是这个值,表示是 USB
  40. Log.d("Battery", "" + intent.getIntExtra("plugged", 0));
  41. //电池健康情况,返回也是一个数字
  42. //BatteryManager.BATTERY_HEALTH_GOOD 良好
  43. //BatteryManager.BATTERY_HEALTH_OVERHEAT 过热
  44. //BatteryManager.BATTERY_HEALTH_DEAD 没电
  45. //BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE 过电压
  46. //BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE 未知错误
  47. Log.d("Battery", "" + intent.getIntExtra("health",BatteryManager.BATTERY_HEALTH_UNKNOWN));
  48. }
  49. }
  50. };

在这里先只是看看手机充电情况的监视,其实手机电量的监视也只需要截获一个广播。很晚了,明天在捣鼓吧

android电池电量监控相关推荐

  1. android电池电量监控,android电量监控 Battery Widget Reborn

    android电量监控 Battery Widget Reborn Pro 你一款管理安卓手机电池的使用软件,其中包括对电池的基本使用信息.使用寿命.电容等方面对电池进行分析管理,提高电池的使用率,安 ...

  2. Android 电池电量监控初步

    整体思路概览 ①由于要显示电池图标,因此需要一组对应的小icon,程序算出当前电量之后,就在状态栏上显示对应的icon即可.本程序用到的icon已经提供在附件,下载后将里面的icons直接复制到res ...

  3. android 电池电量广播,Android查看电池电量的方法(基于BroadcastReceiver)

    本文实例讲述了Android查看电池电量的方法.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.app.Dialo ...

  4. android电池电量更新,android 电池(三):android电池系统

    一.电池系统结构 Android中的电池使用方式主要有三种:AC.USB.Battery 等不同的模式.在应用程序层次,通常包括了电池状态显示的功能.因此从 Android 系统的软件方面(包括驱动程 ...

  5. Android设备电量监控

    这次介绍的是如何通过广播监听设备 这个很简单不用太多介绍,直接看代码 01 /** 02  * 电量监控 03  * 04  * <a href="http://home.51cto. ...

  6. android 检测电量变化,Android电池电量检测

    电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的.电池的这些信息是BatteryService通过广播 主动把数据传送给所关心的应用程序. 应用如果想要接收到Batte ...

  7. android 电池电量显示不正常,vivo电量显示不正常怎么解决?vivo手机电量校准教程...

    vivo手机用了一段时间会发现,手机电量显示会出现不准确的情况,明明刚充满电不到10分钟,仅剩50%电量:或者充电一晚上,电量仍然显示为70%,无法充满.小伙伴们稍安勿躁,这并不是电池本身出了问题,而 ...

  8. Android电池电量检测

    电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的.电池的这些信息是BatteryService通过广播 主动把数据传送给所关心的应用程序. 应用如果想要接收到Batte ...

  9. Android电池电量更新 - BatteryService(转)

    电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的.BatteryService是跑在system_process当中,在系统初始化的时候启动,如下 在SystemSer ...

最新文章

  1. 装箱算法 java_贪心算法装箱问题-Java代码
  2. ASP.NET Core - 在ActionFilter中使用依赖注入
  3. 《MySQL——使用联合索引、覆盖索引,避免临时表的排序操作》
  4. 网络爬虫--21.Scrapy知识点总结
  5. linux 使用碎碎记
  6. LeetCode 5367. 最长快乐前缀
  7. TCP报文段中的序号和确认号
  8. jsp fakePath
  9. 金蝶K3后台SQL修改数据-科目余额表、科目表核算项目
  10. 2019年6月28日 星期五 今日计划
  11. LeetCode No5. 最长回文子串 题解
  12. phpcms 文件:index.html 不可写,phpcms uploadfile不可写怎么办
  13. 2022 年需要掌握的 5 种嵌入式技术
  14. 解读 2022 诺贝尔生理学或医学奖 | MedChemExpress
  15. android 电池续航时间,高端Android手机电池续航排行榜Droid居榜首
  16. mac vue 代理失效
  17. 启用Win10家庭版的远程桌面服务端
  18. python实现克莱姆法则
  19. mpstat命令(linux cpu监控工具)
  20. PHP基础——安装Apache软件

热门文章

  1. UI好看的王者荣耀战力查询助手微信小程序源码下载
  2. 七. PHP模式设计----运行及描写叙述任务
  3. GTX650Ti,GT610安装黑苹果之经验与步骤
  4. 2021年起重机械电气安装维修考试及起重机械电气安装维修考试题
  5. 嵌入式平台选择:树莓派 or BeagleBone Black(BBB)
  6. eVC编译后自动连接到目标板的取消方法
  7. 深圳财华社网络技术有限公司的产品开发情况---自我了解
  8. 管理.模型.SWOT
  9. php假域名,php 伪装来路域名
  10. 【RED-V】基于 RISC-V 架构的开源开发板