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