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
- android5.1 setting之battery
- Android5.0 Battery开发(一)
- android5.1 单次下滑直接切到quick setting
- android5.1之MediaScanner
- simulink 模型之 battery
- Android5.0 Lollipop Setting启动分析
- Setting之蓝牙(1)
- Battery
- battery
- <Android Framework 之路>Android5.1 MediaScanner
- android5.1之vibration学习总结
- Android5.1 之audiofocus学习总结
- Android5.x之RecyclerView使用(1)
- 电量优化之Battery Historian
- Django cms项目之setting.py(1)
- Android5.0之RecyclerView
- <android5.0>之CircularReveal
- Android5.0 之 SnackBar
- Ubuntu15.04 安装rtl8192cu无线网卡驱动
- spring监听器ContextLoaderListener的疑问
- 回归-梯度下降法
- pthread_create如何传递多个参数
- poj 1789 Truck History
- android5.1 setting之battery
- Cocos2D-X屏幕适配新解
- error MSB6006: cmd.exe exited with code 1.
- 复习数据库
- 安装SQL SERVER 2008遇到问题汇总
- HDU Assign the task(dfs编号+线段树成段更新)
- pat 1002. A+B for Polynomials
- 三角形的判断
- HDU1012 - u Calculate e (水题)