Android 电量变化监听

Intent.ACTION_BATTERY_CHANGED

This is a sticky broadcast containing the charging state, level, and other information about the battery. See BatteryManager for documentation on the contents of the Intent.

你不能像组件那样在manifests里声明一个receive ,你只能通过Context.registerReceiver()注册。. See ACTION_BATTERY_LOW,ACTION_BATTERY_OKAYACTION_POWER_CONNECTED, and ACTION_POWER_DISCONNECTED for distinct battery-related broadcasts that are sent and can be received through manifest receivers.

This is a protected intent that can only be sent by the system.

Constant Value: "android.intent.action.BATTERY_CHANGED"

如果我们注册了对 Intent.ACTION_BATTERY_CHANGED 的监听,那么我们马上会收到一个Action为Intent.ACTION_BATTERY_CHANGED的intent,之后只要我们没有取消监听,一定电池发送变化,我们也会收到这样的intent。电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的。电池的这些信息是BatteryService通过广播 主动把数据传送给所关心的应用程序。
通过该intent的extra我们可以取得电池的很多信息,比如电压可以用如下的方式:voltage=intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);

BatteryManager类列出了该intent的extra所包含的信息:
String EXTRA_HEALTH : integer.它表示当前电池的健康状态。
可能的值为:
String EXTRA_ICON_SMALL  : integer.the resource ID of a small status bar icon indicating the current battery state.
它是当前用于表示电池状态的icon的资源id.
String EXTRA_LEVEL : integer.它表示电池当前的电量, 它介于0和  EXTRA_SCALE之间 .
String EXTRA_PLUGGED  : integer.它表示当前手机使用的是哪里的电源。
可能的值有:
0:表示电源是电池
int  BATTERY_PLUGGED_AC :表示电源是AC charger.[应该是指充电器]。
int  BATTERY_PLUGGED_USB :表示电源是USB port.
String EXTRA_PRESENT : boolean.表示是否提供电池。有些手机在使用USB电源的情况下,即使拔出了电池,仍然可以正常工作。
String EXTRA_SCALE : integer.表示电池电量的最大值.
String EXTRA_STATUS  : integer。表示电池的当前状态。
可能的值为:
  int  BATTERY_STATUS_CHARGING 表示正在充电。
  int  BATTERY_STATUS_FULL 表示充满
  int  BATTERY_STATUS_NOT_CHARGING 表示没有充电
  int  BATTERY_STATUS_UNKNOWN表示未知状态。
String EXTRA_TECHNOLOGY  :表示电池使用的技术。比如,对于锂电池是Li-ion.
String EXTRA_TEMPERATURE :integer 。表示当前电池的温度。 
String EXTRA_VOLTAGE  : integer。表示当前电池的电压。.

另外还有两种intent专门用于表示电量低的情况
ACTION_BATTERY_LOW : 表示当前电池电量低。
ACTION_BATTERY_OKAY:表示当前电池已经从电量低恢复为正常。


当你在更改后台更新频率来减少这些更新对电池寿命的影响时,检查当前电量和充电状态是一个好的开始。

电池寿命通过剩余电量和充电状态来影响应用更新的执行。当用交流电充电时,执行更新操作对设备的影响是微不足道的,所以在大多数案例里,你可以把更新频率调到最快。如果设备不在充电,降低更新频率可以帮助延长电池寿命。

类似的,你可以检查电池剩余电量级别,在电量低时,应该降低更新频率甚至停止更新。

注:此处的更新,指的是类似发送心跳包的动作,或者定时更新内容。并非仅仅指更新应用版本。如果是用户动作,比如翻页刷新,不需要根据电量和充电状态处理。

判断当前充电状态

通过判断当前充电状态开始。BatteryManager会通过一个intent广播所有电池和充电详情,包含充电状态。

因为这是一个sticky intent,你不需要注册广播接收器。简单地通过调用 registerReceiver,像下面的代码段传入一个null的接收器,当前电池状态的intent就会返回。你也可以传入一个真实的接收器对象,但我们暂时不会操作更新,所以这是没必要的。

 
 
 
  1. IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
  2. Intent batteryStatus = context.registerReceiver(null, ifilter);
  3. //你可以读到充电状态,如果在充电,可以读到是usb还是交流电
  4.  
  5. // 是否在充电
  6. int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
  7. boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
  8. status == BatteryManager.BATTERY_STATUS_FULL;
  9.  
  10. // 怎么充
  11. int chargePlug
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值