Monitoring the Battery Level and Charging State 监测电池电量和充电状态
来源:互联网 发布:我看网络直播 即评 编辑:程序博客网 时间:2024/05/20 06:36
When you're altering the frequency of your background updates to reduce the effect of those updates on battery life, checking the current battery level and charging state is a good place to start.
The battery-life impact of performing application updates depends on the battery level and charging state of the device. The impact of performing updates while the device is charging over AC is negligible, so in most cases you can maximize your refresh rate whenever the device is connected to a wall charger. Conversely, if the device is discharging, reducing your update rate helps prolong the battery life.
Similarly, you can check the battery charge level, potentially reducing the frequency of—or even stopping—your updates when the battery charge is nearly exhausted.
Determine the Current Charging State
Start by determining the current charge status. The BatteryManager
broadcasts all battery and charging details in a stickyIntent
that includes the charging status.
Because it's a sticky intent, you don't need to register a BroadcastReceiver
—by simply callingregisterReceiver
passing in null
as the receiver as shown in the next snippet, the current battery status intent is returned. You could pass in an actualBroadcastReceiver
object here, but we'll be handling updates in a later section so it's not necessary.
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);Intent batteryStatus = context.registerReceiver(null, ifilter);
You can extract both the current charging status and, if the device is being charged, whether it's charging via USB or AC charger:
// 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;
Typically you should maximize the rate of your background updates in the case where the device is connected to an AC charger, reduce the rate if the charge is over USB, and lower it further if the battery is discharging. //http://blog.csdn.net/sergeycao
Monitor Changes in Charging State
The charging status can change as easily as a device can be plugged in, so it's important to monitor the charging state for changes and alter your refresh rate accordingly.
The BatteryManager
broadcasts an action whenever the device is connected or disconnected from power. It's important to to receive these events even while your app isn't running—particularly as these events should impact how often you start your app in order to initiate a background update—so you should register aBroadcastReceiver
in your manifest to listen for both events by defining theACTION_POWER_CONNECTED
and ACTION_POWER_DISCONNECTED
within an intent filter.
<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>
Within the associated BroadcastReceiver
implementation, you can extract the current charging state and method as described in the previous step.
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; }}
Determine the Current Battery Level
In some cases it's also useful to determine the current battery level. You may choose to reduce the rate of your background updates if the battery charge is below a certain level.
You can find the current battery charge by extracting the current battery level and scale from the battery status intent as shown here:
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);float batteryPct = level / (float)scale;
Monitor Significant Changes in Battery Level
You can't easily continually monitor the battery state, but you don't need to.
Generally speaking, the impact of constantly monitoring the battery level has a greater impact on the battery than your app's normal behavior, so it's good practice to only monitor significant changes in battery level—specifically when the device enters or exits a low battery state.
The manifest snippet below is extracted from the intent filter element within a broadcast receiver. The receiver is triggered whenever the device battery becomes low or exits the low condition by listening forACTION_BATTERY_LOW
and ACTION_BATTERY_OKAY
.
<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>
It is generally good practice to disable all your background updates when the battery is critically low. It doesn't matter how fresh your data is if the phone turns itself off before you can make use of it.
In many cases, the act of charging a device is coincident with putting it into a dock. The next lesson shows you how to determine the current dock state and monitor for changes in device docking.
- Monitoring the Battery Level and Charging State 监测电池电量和充电状态
- 转: Android 电源管理专题之监测电池电量和充电状态Monitoring the Battery Level and Charging State
- 监测电池电量和充电状态
- Determining and Monitoring the Docking State and TypeAndroid 电源管理专题之获取和监测Dock状态和类型
- Determining and Monitoring the Docking State and Type 判断并监测设备的停驻状态与类型
- 监控电池电量和充电状态
- 监视电池电量和充电状态
- 检测电池电量和充电状态
- 监控电池电量和充电状态
- Determining and Monitoring the Connectivity StatusAndroid 电源管理专题之获取和监测网络连接状态
- Android监控电池电量和充电状态
- Android设备的电池续航时间优化(Optimizing Battery Life)——(一)监听电池电量和电池的充电状态
- Android设备的电池续航时间优化(Optimizing Battery Life)——(一)监听电池电量和电池的充电状态
- android 获取充电状态 电池电量
- BPFP系列:优化电池使用时间:监控电池电量和充电状态
- Battery Charging
- Android官方开发文档Training系列课程中文版:电池续航时间优化之监测电池电量及充电状态
- The basics of USB battery charging: a survival guide
- ASP.NET:性能与缓存
- DBMS_STATS.GATHER_TABLE_STATS
- 页面出现滚动条时会出现抖动现象
- 引用计数+写时拷贝
- POJ 1436 Horizontally Visible Segments (线段树)
- Monitoring the Battery Level and Charging State 监测电池电量和充电状态
- 图标设计之道
- MediaElement的视频循环播放
- 成员函数运算+ - * /
- cocos2dx -- 某layer激活后被莫名释放
- SSH2需要jar及解释
- linux 挂载windows下的硬盘盘符及ssh用法
- 单片机内部EEPROM的应用
- aspx+rpt实现网页打印