Android狀態列顯示電池狀態程式碼流程分析
BatteryController.java
註冊廣播接收器,接收Intent.ACTION_BATTERY_CHANGED廣播
之後呼叫BatteryStateChangeCallback cb.onBatteryLevelChanged(level, plugged)來回調重新整理狀態
其中,BatteryStateChangeCallback只是定義的一個interface:
public interface BatteryStateChangeCallback {
public void onBatteryLevelChanged(int level, boolean pluggedIn);
}
它的具體實在QuickSettingsModel.java中:
// BatteryController callback
@Override
public void onBatteryLevelChanged(int level, boolean pluggedIn) {
mBatteryState.batteryLevel = level;
mBatteryState.pluggedIn = pluggedIn;
mBatteryCallback.refreshView(mBatteryTile, mBatteryState);
}
PS:我們可以看到QuickSettingsModel這個類實現了好幾個介面,這些介面都一些回撥:
class QuickSettingsModel implements BluetoothStateChangeCallback,
NetworkSignalChangedCallback,
BatteryStateChangeCallback,
BrightnessStateChangeCallback,
RotationLockControllerCallback,
LocationSettingsChangeCallback {
...
}
繼續往下看:
private RefreshCallback mBatteryCallback;
這裡主要呼叫了refreshView方法來更新檢視,看看它都做了些什麼:
public void refreshView(QuickSettingsTileView ignored, State state) {
if (mShowWhenEnabled) {//這是一個開關,使用者控制是否設定其可見性
mView.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
}
if (state.iconId != 0) {//更新圖示
mView.setImageDrawable(null); // needed to flush any cached IDs
mView.setImageResource(state.iconId);
}
if (state.label != null) {//更新文字
mView.setText(state.label);
}
}
至此,流程結束
如果需要在電池圖示上顯示當前電量百分比:可能需要修改如下地方:
public void refreshView(QuickSettingsTileView ignored, State state) {
if (mShowWhenEnabled) {
mView.setVisibility(state.enabled ? View.VISIBLE : View.GONE);
}
if (state.iconId != 0) {
mView.setImageDrawable(null); // needed to flush any cached IDs
mView.setImageResource(state.iconId);
}
if (state instanceof BatteryState) {
//如果走到這裡說明更新的是電池?上面的iconId 是幹啥的還有待進一步研究
Log.d(TAG, "quan #################################################### state.batteryLevel is " + ((BatteryState)state).batteryLevel);
}
else {
Log.d(TAG, "quan #################################################### mBatteryState.batteryLevel is " + mBatteryState.batteryLevel);
}
if (state.label != null) {
mView.setText(state.label);
}
}
另外,
BatteryMeterView.java中有關於狀態列電池初始化的程式碼。
相關推薦
Android狀態列顯示電池狀態程式碼流程分析
BatteryController.java 註冊廣播接收器,接收Intent.ACTION_BATTERY_CHANGED廣播 之後呼叫BatteryStateChangeCallback cb.onBatteryLevelChanged(level, plugged)來
Android狀態列顯示藍芽耳機電量
1.HeadsetStateMachine.java static { classInitNative(); VENDOR_SPECIFIC_AT_COMMAND_COMPANY_ID = new HashMap&l
manjaro狀態列顯示實時網速cpu記憶體等資訊
開源專案indicator-sysmonitor地址:https://github.com/fossfreedom/indicator-sysmonitor 1,開啟manjaro自帶的軟體商店: 搜尋
Qt5主視窗狀態列顯示時間
使用Qt Creator建立預設的窗體程式後,主視窗QMainWindow有statusBar狀態列,在此狀態列實時顯示時間可以使用下面方法實現: mainwindow.h檔案內容: #ifndef MAINWINDOW_H #define MAINWINDOW_H #incl
Android中沉浸式狀態列,改變狀態列顏色類似QQ樣式
1、使用該功能需要使用到第三方庫SystemBarTint 下載地址:https://github.com/jgilfelt/SystemBarTint 2、需要在AndroidMainfest檔案中Application設定樣式 android:the
vscode狀態列顯示
var pclintBar: vscode.StatusBarItem = vscode.window.createStatusBarItem(StatusBarAlignment.Right, 200); pclintBar.text = '$(megaphone) pclint檢查
[Xcode10 實際操作]一、博主領進門-(14)在頂部狀態列顯示風火輪以及為應用程式新增應用圖示
本文將演示在頂部狀態列顯示風火輪。 主要用於在執行某個長時間動作時,提示使用者耐心等待動作的執行。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 應用程式物件的核心作用,是提供程式執行期間的控制和協作。 每一個程式必須有,且僅有一個應用例項。 1 im
Android 沉浸式狀態列效果(狀態列與內容完全融合、類似於iphone 7.0系統)
今天偶然間發現一種叫做沉浸式狀態列的、看了之後激動的非常、立馬開操! Activity的setContentView之前新增 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
android沉浸式狀態列、變色狀態列、透明狀態列、修改狀態列顏色及透明
首先我要區分清楚沉浸式狀態列與變色狀態列。 沉浸式狀態列指的是,狀態列隱藏,在手指做了相關操作後,狀態列顯示出來,例如視訊播放器,在播放視訊時是隱藏狀態列的,但是點選螢幕的時候,狀態列會顯示出來,再例如文字閱讀器,在閱讀的時候是全屏的,然後從螢幕上方下滑或者下
Android狀態列著色-透明狀態列
最近專案上有需求 ,要求狀態列透明化 。還有需求是拖動狀態列標題一下的內容,標題欄的顏色要變化 。這裡所謂的既是狀態列著色,也是我們經常聽到的沉浸式狀態列,關於沉浸式的稱呼網上也有很多吐槽的,這裡就不做過多討論了,以下我們統稱狀態列著色,這樣我覺得更加容易理解。 從Andr
Android底部選單欄、Android沉浸式狀態列(頂部狀態列修改顏色)、自定義標題欄
0、簡介: 沒有使用TabHost切換,而是變成FragmentActivity替換Fragment;沉浸式引用的git上面的jar包。 先看圖片 1、底部導航欄 核心程式碼 <span style="white-space:pre"> </span&
Android Camera fw學習(六)-takepicture(ZSL)流程分析
備註:博文仍然是分析Android5.1 API1程式碼的學習筆記。 這次筆記主要是來分析ZSL流程的。ZSL(zear shutter lag)即零延時,就是在拍照時不停預覽就可以拍照.由於有較好的使用者體驗度,該feature是現在大部分手機都擁有的功能。 下面不再貼出大
Android Camera fw學習(五)-takepicutre(STILL_TAKEPICTURE)流程分析
備註:博文仍然是分析Android5.1的程式碼所寫的學習筆記。 前面已經瞭解過API1大概過程,這裡直奔主題。與TakePicture息息相關的主要有4個執行緒CaptureSequencer,JpegProcessor,Camera3Device::RequestThread,
hyperledger fabric超級賬本java sdk樣例e2e程式碼流程分析
一 checkConfig Before 1.1 private static final TestConfig testConfig = TestConfig.getConfig(); &
spi nand driver程式碼流程分析
硬體環境 主晶片:bcm63xx, spi nand:Winbond W25N01GV 程式碼環境 linux-4.1.27/drivers/mtd mtd_blkdevs.o mtdblock.o mtdchar.o m
SpringXD 任務、啟動訊息通訊程式碼流程分析
任務部署時,xd-admin和container之間通過zookeeper的節點監聽通訊。container監聽zk deployment節點,執行部署。同事繫結kafka message consumer和reactor subscriber。 任務啟動時,xd-admin和container通過
Android 5.1 長按power鍵流程分析
private GlobalActionsDialog createDialog() { // Simple toggle style if there's no vibrator, otherwise use a tri-state if (!mHasVibrator
nova boot程式碼流程分析(四):nova與neutron的l2 agent(neutron-linuxbridge-agent)互動
#/nova/virt/libvirt/driver.py:LibvirtDriver # NOTE(ilyaalekseyev): Implementation like in multinics # for xenapi(tr3buchet)
uboot的eMMC初始化程式碼流程分析
原始碼參考九鼎科技移植的X210開發板捆綁BSP中的uboot, 版本為1.3.4 mmc初始化函式int mmc_initialize(bd_t *bis)在uboot/lib_arm/board.c中的start_armboot()函式中被呼叫(uboot
nova volume-attach程式碼流程分析
最近遇到一個bug,是使用者在nova端attach一個volume給instance後,再發起detach操作,導致該volume detach失敗且一直處於detaching狀態,藉此走讀nova volume-detach的程式碼流程,在此分享下心得筆記。