首页 > 编程知识 正文

安卓手机电池管理,电池电量检测管理

时间:2023-05-04 20:46:03 阅读:277820 作者:1704

系统优化 - 去除电池电量监测管理功能 去除电池电量监测管理功能,去除电量提示功能。需要去除电池电量对升级功能的影响,如低电量时无法进行系统升级。车机平台不需要电池电量监测管理,电池管理模块对界面显示和系统功能交互的部分都需要屏蔽。 1.电池状态栏

/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布局

<include layout="@layout/system_icons"/>

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

public void start() {...... //注册intent, 主要关注的是ACTION_BATTERY_CHANGED消息。 // Register for Intent broadcasts for... IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);}

当电池电量发生变化的时候,BatteryService就会发送 ACTION_BATTERY_CHANGED的 intent.
接着如下函数就会被调用:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { ...... mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); ...... if (!plugged && (bucket < oldBucket || oldPlugged) && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN && bucket < 0) { showLowBatteryWarning(); ...... } }};

如果不想要显示低电量对话框, 只要不调用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通知上层

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。