阅读更多

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

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会更新这些文件。
  • 大小: 48.1 KB
  • 查看图片附件

更多相关文章

  1. android检测网络状态
  2. Android(安卓)去掉状态栏 去掉标题栏 沉浸式状态栏 状态栏重叠
  3. Android(安卓)O版本Call对象解析
  4. Android状态栏和虚拟导航栏的适配总结
  5. Android四种Activity的加载模式
  6. Android四种Activity的加载模式
  7. android:shape的使用
  8. Android(安卓)如何保持横竖屏切换不变以及Fragment调用setRetain
  9. android:shape的使用

随机推荐

  1. Android(安卓): gen already exists but
  2. Android相关知识集合
  3. Android(安卓)FlexboxLayout的简单了解以
  4. Android提高之多方向抽屉实现方法
  5. Android(安卓)10.0夜间模式和换肤(备份)
  6. Android(安卓)4.4以上 根据uri获取路径的
  7. Android中的Sqlite数据库操作总结
  8. Android中文API(124) ―― DialerFilter
  9. android 手机 remount failed: Operation
  10. Android中获取屏幕信息的几种方式