[电池简易流程图片在附件中]

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(安卓)WebRTC
  2. 【android】对canvas的translate(),save(),restore()方法的理解
  3. 模仿天天动听的seekbar
  4. Android(安卓)隐藏系统状态栏和标题栏
  5. Android(安卓)Q : 安卓源码、水滴屏适配状态栏图标(图标过多时显
  6. 获取Android设备电池电量状态
  7. android 动态控制状态栏显示和隐藏的方法实例
  8. Android监听Home、电源键
  9. android状态栏一体化(沉浸式状态栏)

随机推荐

  1. Android Studio混淆模板及常用第三方混淆
  2. Linux Kernel and Android 休眠与唤醒(中
  3. android之发送短信的方法研究
  4. Java/Android中的PBKDF2加密认证
  5. [API GUIDE 学习笔记]android MediaPlaye
  6. android源码2.3.7开发环境与编译实战(ubu
  7. android(6) 扇形菜单实现
  8. fragment保存页面不销毁
  9. 基于第三方开发Android锁屏
  10. 错误”. lang。当使用带有ViewPager的选