1. 程式人生 > >Android 怎樣控制電量百分比是否顯示

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.jarSetting.apk

SettingsProvider.apk SystemUI.apk