Android 怎样控制电量百分比是不是显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 怎样控制电量百分比是不是显示相关的知识,希望对你有一定的参考价值。

我的android版本是5.1。
我是这样去实现的:

首先-----》我在priv-app/Settings里面的battery里面加一条SwitchPreference,这个是是否显示的开关。
通过这个开关将值写入数据库中。然后SystemUI就可以取到这个值控制是否显示
这个battery控制界面是PowerUsageSummary,它是一个PreferenceFragment。
它的界面的绘制是通过好几种途径,最后都通过addPreference加到一个PreferenceGroup里面了。

然后-----》我需要改frameworks层的东西,
1>在android.provider.Settings类的System下面加一个String类型的名字,
System对应的是数据库的名字
例如BATTERY_POWER_PERCENTAGE
2>要修改SettingsProvider这个应用,它是Settings的数据库管理应用,
主要提供了一系列操作数据库的方法,先在defaults.xml里面添加一个integer变量,
给他一个初始值0,0对应不显示,1对应显示。然后找打DatabaseHelper这个类,
它是一个SQLiteOpenHelper,它封装了一系列操作sqlite数据库的方法,
我们在loadSystemSettings方法里面可以将直接在defaults.xml定义的值写入数据库。
3>我们要修改SystemUI这个应用,看过源码才知道,其实状态栏是分3个显示的,
锁屏的时候是一个,对应的类是KeyguardStatusBarView,它是一个RelativeLayout,
对应的布局是Keyguard_status_bar.xml

进入后是一个,对应的类是PhoneStatusBar,它是BaseStatusBar的子类
对应的布局是status_bar.xml.xml

下拉通知菜单的时候又是一个,对应的类是StatusBarHeaderView,它是一个RelativeLayout
它对应的布局是Status_bar_expanded_header.xml

要想监听到电量的变化,必须实现BatteryController.BatteryStateChangeCallback这个接口,
它有两个方法,其中onBatteryLevelChanged方法就是监听电量变化的
BatteryController是一个BroadcastReceiver,当电量变化时可以收到

PowerManager.ACTION_POWER_SAVE_MODE_CHANGED这个action,

这时就会走onBatteryLevelChanged方法,所有我们只要实现这个接口就可以监听到。
KeyguardStatusBarView和StatusBarHeaderView是有实现的,所以在这里我将
PhoneStatusBar也实现了这个接口。当然这不是控制电量百分比是否显示,

在设置里面我们已经加了一个控制开关,它会将值写入数据库,我们在PhoneStatusBar
类中只需要写一个ContentObserver来监听改变来控制,其实这个百分比是一个textview,
PhoneStatusBar对应的布局是status_bar.xml,在里面加一个textview在自定义电池图标的下面,
在代码中只需要用setVisibility方法就可以控制。

KeyguardStatusBarView也是一样这样实现。

好了说了这么多,其实要编译和push的有4个东西,frameworks.jar Setting.apk
SettingsProvider.apk SystemUI.apk
参考技术A 我的Android版本是5.1。
我是这样去实现的:

首先-----》我在priv-app/Settings里面的battery里面加一条SwitchPreference,这个是是否显示的开关。
通过这个开关将值写入数据库中。然后SystemUI就可以取到这个值控制是否显示
这个battery控制界面是PowerUsageSummary,它是一个PreferenceFragment。
它的界面的绘制是通过好几种途径,最后都通过addPreference加到一个PreferenceGroup里面了。

然后-----》我需要改frameworks层的东西,
1>在android.provider.Settings类的System下面加一个String类型的名字,
System对应的是数据库的名字
例如BATTERY_POWER_PERCENTAGE
2>要修改SettingsProvider这个应用,它是Settings的数据库管理应用,
主要提供了一系列操作数据库的方法,先在defaults.xml里面添加一个integer变量,
给他一个初始值0,0对应不显示,1对应显示。然后找打DatabaseHelper这个类,
它是一个SQLiteOpenHelper,它封装了一系列操作sqlite数据库的方法,
我们在loadSystemSettings方法里面可以将直接在defaults.xml定义的值写入数据库。
3>我们要修改SystemUI这个应用,看过源码才知道,其实状态栏是分3个显示的,
锁屏的时候是一个,对应的类是KeyguardStatusBarView,它是一个RelativeLayout,
对应的布局是Keyguard_status_bar.xml

进入后是一个,对应的类是PhoneStatusBar,它是BaseStatusBar的子类
对应的布局是status_bar.xml.xml

下拉通知菜单的时候又是一个,对应的类是StatusBarHeaderView,它是一个RelativeLayout
它对应的布局是Status_bar_expanded_header.xml

要想监听到电量的变化,必须实现BatteryController.BatteryStateChangeCallback这个接口,
它有两个方法,其中onBatteryLevelChanged方法就是监听电量变化的
BatteryController是一个BroadcastReceiver,当电量变化时可以收到

PowerManager.ACTION_POWER_SAVE_MODE_CHANGED这个action,

这时就会走onBatteryLevelChanged方法,所有我们只要实现这个接口就可以监听到。
KeyguardStatusBarView和StatusBarHeaderView是有实现的,所以在这里我将
PhoneStatusBar也实现了这个接口。当然这不是控制电量百分比是否显示,

在设置里面我们已经加了一个控制开关,它会将值写入数据库,我们在PhoneStatusBar
类中只需要写一个ContentObserver来监听改变来控制,其实这个百分比是一个textview,
PhoneStatusBar对应的布局是status_bar.xml,在里面加一个textview在自定义电池图标的下面,
在代码中只需要用setVisibility方法就可以控制。

KeyguardStatusBarView也是一样这样实现。

好了说了这么多,其实要编译和push的有4个东西,frameworks.jar Setting.apk
SettingsProvider.apk SystemUI.apk

以上是关于Android 怎样控制电量百分比是不是显示的主要内容,如果未能解决你的问题,请参考以下文章

请问华为手机怎样查看蓝牙耳机的电量百分比

iqoo7如何让电池显示百分比在外面?

状态栏电量百分比的字体怎么修改

手机怎样显示蓝牙耳机的电量

如何在android中获取电池电量变化(仅当有电量/百分比变化时)?

如何在android中的ble中每5秒更新一次电池电量