系统优化 - 去除电池电量监测管理功能

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

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.关于手机里面的状态信息中移除电池相关

  1. 注释 /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" />
  1. 注释相关代码 /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() {@Overridepublic 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.关闭低电提醒

  1. 关闭/打开低电压声音提醒

修改setting provider中的def_power_sounds_enabled配置项。文件地址如下:

android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

将def_power_sounds_enabled的值改为0即关闭低电提示。将值改为1时表示打开提示。

  1. 修改低电提示音文件

修改setting provider中的def_low_battery_sound配置项。文件地址如下:

android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  1. 修改低电提示音阈值

修改低电提示音阈值可以修改如下文件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中获取电量信息,并根据电量信息画一个电池图标在画布上。

  • 电池服务的源码结构

Framework\base\services\java\com\android\server

  1. SystemServer.java
    创建BatteryServices、PowerManagerService、ActivityManagerService
  2. BatterySevices.java
    监听底层上报的battery事件,广播电池发生改变的消息

Framework\base\services\java\com\android\server\am

  1. ActivityManagerService.java
    创建BatteryStatsService
  2. BatteryStatsService.java
    统计和记录电池参数的信息

Framework\base\services\java\com\android\server\power

  1. PowerManagerService.java
    监听电池发生变化的广播消息,并调节系统的电源状态,例如亮屏

Framework\base\core\java\com\internal\os

  1. BatteryStatsImpl.java
    统计和记录电池参数的信息,并通知其他模块

System\core\healthd

  1. healthd.cpp
    创建uevent socket,监听内核上报的内核事件
  2. BatteryMonitor.cpp
    初始化本地电池数据结构,将power_supply路径下属性节点路径填充进去,
  3. BatteryMonitor.h
  4. BatteryPropertiesRegistrar.cpp
    创建电池属性监听器,并将其注册到Android的系统服务中
  5. BatteryPropertiesRegistrar.h
  • 用户层

用户层则是在BatteryService.java中通过广播的方式将如下一些电池相关的属性上报给上层app使用。
frameworks/base/services/java/com/android/server/BatteryService.java

BatteryService 在SystemServer.java 中创建,BatteryService是在系统启动的时候就跑起来的,为电池及充电相关的服务,主要作了如下几件事情: 监听 UEvent、读取sysfs 中的状态 、发出广播Intent.ACTION_BATTERY_CHANGED通知上层

Android系统移除电池电量监测管理功能相关推荐

  1. Android系统默认显示电池电量百分比

    Android系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路: 需求:Android 11 让系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路 ...

  2. android代码跳过锁屏,直播app源代码,Android系统移除锁屏功能实现

    直播app源代码,Android系统移除锁屏功能实现的相关代码 diff --git a/frameworks/base/packages/SettingsProvider/res/values/de ...

  3. android 自定义View绘制电池电量(电池内带数字显示)

    最新公司需要一个电池内带数字的显示电池电量需求,百度了一下.参考下面这篇文章写的Android自定义View之电池电量显示. 增加了里面电池电量数字显示,还有就是一个屏幕适配.不管屏幕分辨率基本都能适 ...

  4. android 4.4 batteryservice 电池电量显示分析

    转载地址:http://blog.csdn.net/daweibalang717/article/details/40615453 最近工作接触到这么的东西,这是我对整个电池管理方面Java 层的分析 ...

  5. iOS 如何获取手机型号、系统版本、电池电量

    1.手机型号:iPhone 6 NSString* phoneModel = [self iphoneType]; //方法在下面 2.手机系统版本:9.1 NSString* phoneVersio ...

  6. Android自定义View之电池电量显示

    自定义简单的电池电量显示.话不多说,直接上代码 package com.kimascend.thermometer.customview; import android.content.Context ...

  7. android系统在后台消耗电量,手机后台耗电量过大怎样关闭?

    "极客谈科技",全新视角.全新思路,伴您遨游神奇的科技世界. 智能手机硬件发展迅速,唯独手机电池停滞不前.想要更高的电池容量,势必会导致电池体积的增加,出于手机轻薄化的设计理念,并 ...

  8. iOS开发:电池电量监测

    一.电池状态获取及监测 #pragma mark - 电池状态获取及监控 -(void)checkAndMonitorBatteryState{UIDevice * device = [UIDevic ...

  9. 在Android系统中添加组合键快捷启动功能

    启动系统特定功能的组合键的判断应该在系统分发按键消息前处理, 这样从系统运行 的角度来说成本最低. 添加组合键处理需要先搞清楚按键消息在framework中采集 和分发子系统的工作流程, 虽然有and ...

最新文章

  1. linux:进程之间的通信
  2. 「后端小伙伴来学前端了」关于 Vue中 Slot 插槽的使用,实用且也是组件中必会的一个知识,另外也可以实现父子组件之间通信
  3. CodeForces - 1220B Multiplication Table(思维)
  4. 养成一个习惯有多难?不如先从一个小目标开始
  5. python中socket模块常用吗_python中socket模块详解
  6. 快乐刷课---Tampermonkey下载使用
  7. 联想拯救者y7000p加内存条_内存、硬盘不够用?手把手教你升级联想拯救者Y7000P...
  8. 微信小程序如何跳转视频号直播间
  9. clang diagnostic的简单介绍
  10. django完成一个可重用注册登录系统
  11. C语言 数字实现字母表 链表实现字母表
  12. vue组件可视化_Vue HTML5音频可视化组件
  13. 淘宝API关键词搜索接口调用示例
  14. 用字体,每次都要先开软件,ifonts闪退?不好用怎么办
  15. 第三届“尖货市场”评选开启:头部企业级应用“买手团”搭台 十家优选服务商唱戏...
  16. 去除stackoverflow页面左下角的cookie弹窗的办法
  17. 婚礼类小程序前端界面模板源码
  18. Android Video Player. 安卓视频播放器,封装 MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音,悬浮播放,广告播放,列表播放,弹幕
  19. 避其锋芒,侧翼出击。——司马亮创业回忆录(一)
  20. Alpha系列——从MPT到APT

热门文章

  1. 【ROBOGUIDE仿真】:带传送链和行走轴的双机器人多工作台工作站
  2. 用Python找出了删除自己微信的所有人并将他们自动化删除了
  3. 网红扎推背后的映客:78个内容审核人员把关3680万主播
  4. 教你如何查看一款App里面所包含的图片
  5. 锐龙处理器对linux软件支持咋样,amd锐龙现在还有小毛病吗?据说软件支持不太好?...
  6. 禁用计算机账户密码更改,禁用计算机帐户密码更改 - Windows Server | Microsoft Docs...
  7. 银行数字化转型导师坚鹏:银行数字化转型培训方案
  8. 十分钟带你入门Nodejs
  9. 编程语言那么多,为何建议学习python呢?
  10. mysql查询转json数据库_json格式数据,将数据库中查询的结果转换为json, 然后调用接口的方式返回json(方式一)...