android5.1 setting之battery

本文参考下面博文
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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值