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


你可能感兴趣的:(android,Settings)