阅读更多

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

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(安卓)判断网络是否可用以及网络类型(WIFI,2G,3G,4G)
  3. Android电池管理
  4. android检测网络状态
  5. Android(安卓)去掉状态栏 去掉标题栏 沉浸式状态栏 状态栏重叠
  6. Android(安卓)O版本Call对象解析
  7. Android状态栏和虚拟导航栏的适配总结
  8. Android四种Activity的加载模式
  9. Android四种Activity的加载模式

随机推荐

  1. android拼接多张bitmap图片
  2. Android判断是否有网络连接
  3. Android(安卓)Socket 编程
  4. Android(安卓)VTS学习
  5. Android(安卓)读取安装的非系统应用程序
  6. 我的android绘图学习笔记(二)
  7. android完全退出程序
  8. android 手势识别(一)
  9. 安卓添加全局字体tff
  10. Jquery 判断是否 移动设备 浏览