Android系统移除电池电量监测管理功能

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

  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-tile
		android: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() {
  @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.关闭低电提醒

  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通知上层

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值