/frameworks/base/packages/SystemUI/res/layout/system_icons.xml
<!--电池图标的部分:--><com.android.systemui.BatteryMeterView android:id="@+id/battery" android:layout_height="14.5dp" android:layout_width="9.5dp"+++ android:visibility="gone" 电池 android:layout_marginBottom="@dimen/battery_margin_bottom"/> <!--电池电量百分比的部分:--><com.android.systemui.BatteryLevelTextView android:id="@+id/battery_level_text" android:layout_height="match_parent" android:layout_width="wrap_content" android:gravity="center" android:layout_gravity="center_vertical" android:textColor="#ffffff" android:textSize="@dimen/battery_level_text_size" android:layout_marginStart="7dp"/>/frameworks/base/packages/SystemUI/res/layout/status_bar.xml
从布局来看,电池的显示属于status_bar.xml,包含了system_icons.xml布局
Android4.4 隐藏状态栏图标(电池,信号,时间):只要在每个icon上加android:visibility=“gone”
2.移除设置中电池选项Android6.0 移除设置中电池选项,只要关注setting app下有关电池的xml和代码
注释电池相关模块 /packages/apps/Settings/AndroidManifest.xml <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"android:resource="@id/battery_settings" /> 注释电池相关模块 /packages/apps/Settings/res/xml/dashboard_categories.xml <dashboard-tileandroid:id="@+id/battery_settings"android:title="@string/power_usage_summary_title"android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"android:icon="@drawable/ic_settings_battery" /> 移除电池注册模块 /packages/apps/Settings/src/com/android/settings/SettingsActivity.java // registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));//unregisterReceiver(mBatteryInfoReceiver);在这个代码下搜R.id.battery_settings把这个相关代码也移除
3.关于手机里面的状态信息中移除电池相关 注释 /packages/apps/Settings/res/xml/device_info_status.xml <Preference android:key="battery_status" style="?android:attr/preferenceInformationStyle" android:title="@string/battery_status_title" android:summary="@string/device_info_not_available" android:persistent="false" /> <Preference android:key="battery_level" style="?android:attr/preferenceInformationStyle" android:title="@string/battery_level_title" android:summary="@string/device_info_not_available" android:persistent="false" /> 注释相关代码 /packages/apps/Settings/src/com/android/settings/deviceinfo/Status.java @@ -89,8 +89,8 @@ public class Status extends PreferenceActivity { private String mUnavailable; private Preference mUptime;- private Preference mBatteryStatus;- private Preference mBatteryLevel;+ // private Preference mBatteryStatus;+ // private Preference mBatteryLevel; private Preference mBtAddress;@@ -131,8 +131,8 @@ public class Status extends PreferenceActivity { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {- mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent));- mBatteryStatus.setSummary(Utils.getBatteryStatus(getResources(), intent));+ // mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent));+ // mBatteryStatus.setSummary(Utils.getBatteryStatus(getResources(), intent));@@ -166,8 +166,8 @@ public class Status extends PreferenceActivity { mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE); addPreferencesFromResource(R.xml.device_info_status);- mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);- mBatteryStatus = findPreference(KEY_BATTERY_STATUS);+ // mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);+ // mBatteryStatus = findPreference(KEY_BATTERY_STATUS); mBtAddress = findPreference(KEY_BT_ADDRESS); 4.电池低电量告警提示通过发送intent ACTION_BATTERY_CHANGED,也就是电池电量只要变化就检查是否需要低电量告警,并且实现挪到了PowerUI中。
frameworks/base/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
当电池电量发生变化的时候,BatteryService就会发送 ACTION_BATTERY_CHANGED的 intent.
接着如下函数就会被调用:
如果不想要显示低电量对话框, 只要不调用showLowBatteryWarning()即可。
5.关闭低电提醒 关闭/打开低电压声音提醒修改setting provider中的def_power_sounds_enabled配置项。文件地址如下:
android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml将def_power_sounds_enabled的值改为0即关闭低电提示。将值改为1时表示打开提示。
修改低电提示音文件修改setting provider中的def_low_battery_sound配置项。文件地址如下:
android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml 修改低电提示音阈值修改低电提示音阈值可以修改如下文件android/frameworks/base/core/res/res/values/config.xml中如下两个值:
<!-- Display low battery warning when battery level dips to this value --> <integer name="config_lowBatteryWarningLevel">15</integer> <!-- Close low battery warning when battery level reaches this value --> <integer name="config_lowBatteryCloseWarningLevel">20</integer> 6.framework层电池图标具体的实现显示和更新分别在两个自定义View中实现:BatteryMeterView和BatteryLevelTextView
在原生的实现中: BatteryMeterView这个类来监听电池状态的变化的,是一个被BatteryController类所管理的ImageView。 BatteryController通过监听android.intent.action.BATTERY_CHANGED广播以从 BetteryService中获取电量信息,并根据电量信息画一个电池图标在画布上。
电池服务的源码结构Frameworkbaseservicesjavacomandroidserver
SystemServer.java创建BatteryServices、PowerManagerService、ActivityManagerServiceBatterySevices.java
监听底层上报的battery事件,广播电池发生改变的消息
Frameworkbaseservicesjavacomandroidserveram
ActivityManagerService.java创建BatteryStatsServiceBatteryStatsService.java
统计和记录电池参数的信息
Frameworkbaseservicesjavacomandroidserverpower
PowerManagerService.java监听电池发生变化的广播消息,并调节系统的电源状态,例如亮屏
Frameworkbasecorejavacominternalos
BatteryStatsImpl.java统计和记录电池参数的信息,并通知其他模块
Systemcorehealthd
healthd.cpp创建uevent socket,监听内核上报的内核事件BatteryMonitor.cpp
初始化本地电池数据结构,将power_supply路径下属性节点路径填充进去,BatteryMonitor.hBatteryPropertiesRegistrar.cpp
创建电池属性监听器,并将其注册到Android的系统服务中BatteryPropertiesRegistrar.h 用户层
用户层则是在BatteryService.java中通过广播的方式将如下一些电池相关的属性上报给上层app使用。
frameworks/base/services/java/com/android/server/BatteryService.java
BatteryService 在SystemServer.java 中创建,BatteryService是在系统启动的时候就跑起来的,为电池及充电相关的服务,主要作了如下几件事情: 监听 UEvent、读取sysfs 中的状态 、发出广播Intent.ACTION_BATTERY_CHANGED通知上层