android5.1 setting之battery

来源:互联网 发布:微网站源码 编辑:程序博客网 时间:2024/06/06 00:24

本文参考下面博文
http://blog.csdn.net/bi511304183/article/details/9303073
http://blog.csdn.net/wangjinyu501/article/details/22077803

本次学习battery的缘由是因为系统重启后在setting里没有了battery这项功能。而明明外接有电池,却不显示。
一、android电源管理结构
Android中的电池使用方式主要有三种:AC、USB、Battery 等不同的模式。在应用程序层次,通常包括了电池状态显示的功能。因此从 Android 系统的软件方面(包括驱动程序和用户空间内容)需要在一定程度上获得电池的状态,电池系统主要负责电池信息统计、显示。电池系统的架构如下所示:
这里写图片描述
自下而上, Android 的电池系统分成以下几个部分
1、驱动程序:
特定硬件平台电池的驱动程序,用 Linux的Power Supply 驱动程序,实现向用户空间提供信息。Battery 驱动程序需要通过sys文件系 统向用户空间提供接口, sys文件系统的路径是由上层的程序指定的。Linux标准的 Power Supply驱动程序 所使用的文件系统路径为:/sys/class/power_supply ,其中的每个子目录表示一种能源供应设备的名称。
这里写图片描述

Linux中驱动程序:power_supply
这里写图片描述
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 会更新这些文件。传送信息到java 

2、本地代码 - JNI

3 、JAVA 代码
setting中battery的字符串出处:
代码路径:
android-5.1-m200-mr1/packages/apps/Settings/res/values/strings.xml
这里写图片描述
显示preference 的xml文件
android-5.1-m200-mr1/packages/apps/Settings/res/xml/power_usage_summary.xml
这里写图片描述
加载preference 的xml文件
android-5.1-m200-mr1/packages/apps/Settings/src/com/android/settings/fuelgauge/PowerUsageSummary.java
这里写图片描述

android-5.1-m200-mr1/packages/apps/Settings/res/xml/dashboard_categories.xml
这里写图片描述

android-5.1-m200-mr1/packages/apps/Settings/src/com/android/settings/SettingsActivity.java
这里写图片描述

判断battery的present的值,如果为false,则去掉battery这项功能
这里写图片描述

接收广播,解析广播中的action,以及batteryPresent
这里写图片描述

注册接收ACTION_BATTERY_CHANGED广播
这里写图片描述

framework层的batteryservice发送ACTION_BATTERY_CHANGED广播
frameworks/base/services/core/java/com/android/server/BatteryService.java

这里写图片描述

二、Uevent部分
Uevent是内核通知android有状态变化的一种方法,比如USB线插入、拔出,电池电量变化等等。其本质是内核发送(可以通过socket)一个字符串,应用层(android)接收并解释该字符串,获取相应信息。如下图所示,如果其中有信息变化,uevent触发,做出相应的数更新。

这里写图片描述

adb shell进入android系统中执行dumpsys battery 可以显示电池的信息
如图所示:
这里写图片描述

battery的驱动代码
kernel-3.10.14/drivers/power/ricoh619-battery.c
这里写图片描述

0 0
原创粉丝点击