Android电池管理_第1张图片
[电池简易流程图片在附件中]

java代码:
frameworks/frameworks/base/services/java/com/android/server/Ba
tteryService.java
JNI代码:
frameworks/base/services/jni/com_android_server_BatteryService.
cpp
kernel driver代码
drivers/power/xx_battery.c
2、BatteryService
BatteryService作为电池及充电相关的服务: 监听Uevent、读取sysfs
里中的状态 、广播Intent.ACTION_BATTERY_CHANGED。

(1)、mUEventObserver
BatteryService实现了一个UevenObserver mUEventObserver。
uevent是Linux内核用来向用户空间主动上报事件的机制,对于JAVA程
序来说,只实现UEventObserver的虚函数onUEvent,然后注册即可。
  private UEventObserver mUEventObserver = new UEventObserver(){  @Override   public void onUEvent(UEventObserver.UEvent event){     update();}}

BatteryService只关注power_supply的事件,所以在构造函数注册:
    public BatteryService(Context context){         mContext = context;         mBatteryStats = BatteryStatsService.getService();         mUEventObserver.startObserving("SUBSYSTEM=power_supply");       //set initial status       update();}

(2)、update()
update读取sysfs文件做到同步取得电池信息, 然后根据读到的状态更新
BatteryService的成员变量,并广播一个Intent来通知其它关注电源状态的
组件。
当kernel 有power_supply 事件上报时,mUEventObserver 调用
update()函数,然后update 调用native_update 从sysfs 中读取相关状态
(com_android_server_BatteryService.cpp):
private synchronized final void update(){  native_update();}

(3)、sysfs
Linux驱动driver维护着保存电池信息的一组文件sysfs,供应用程序获
取电源相关状态:
#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online" AC 电源连接
状态
#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online" USB 电源
连接状态
#define BATTERY_STATUS_PATH
"/sys/class/power_supply/battery/status"充电状态
#define BATTERY_HEALTH_PATH
"/sys/class/power_supply/battery/health"电池状态
#define BATTERY_PRESENT_PATH
"/sys/class/power_supply/battery/present"使用状态
#define BATTERY_CAPACITY_PATH
"/sys/class/power_supply/battery/capacity"电池level
#define BATTERY_VOLTAGE_PATH
"/sys/class/power_supply/battery/batt_vol"电池电压
#define BATTERY_TEMPERATURE_PATH
"/sys/class/power_supply/battery/batt_temp"电池温度
#define BATTERY_TECHNOLOGY_PATH
"/sys/class/power_supply/battery/technology"电池技术
当电池状态发生变化时,driver会更新这些文件。

更多相关文章

  1. Android Q : 安卓源码、水滴屏适配状态栏图标(图标过多时显示一个
  2. android 动态控制状态栏显示和隐藏的方法实例
  3. Android监听Home、电源键
  4. android状态栏一体化(沉浸式状态栏)
  5. Android状态栏总结
  6. Android 电源管理

随机推荐

  1. 6.)PHPWeb开发框架~laravel几种启动方式介
  2. 5.)PHPWeb开发框架~laravel目录结构分析
  3. 4.)PHPWeb开发框架~直接下载方式部署larav
  4. 3.)PHPWeb开发框架~使用composer管理工具
  5. 2.)PHPWeb开发框架~Laravel的开发环境配置
  6. 1.)PHPWeb开发框架~Laravel框架的简介(简洁
  7. 《GB/T700-2006》PDF下载
  8. TF卡出现“分区变0字节”的解决办法
  9. 4.27 定界符与运算流程控制
  10. CSS盒模型/Box-szing功能/相对定位、绝对