Pages

2011年5月20日 星期五

Battery Power Update

這是 UEvent 的應用之一,底層會定期送 battery information 給 Android,而上層負責處理的是 Battery Service。

路徑
   framework/base/services/java/com/android/server/BatteryService.java
說明
  • BatteryService 會註冊一個 UEventObserver,用來觀察是否有符合 SUBSYSTEM=power_supply 子字串的 uevent 發上來,假如有,就會觸發 onUEvent。
    mPowerSupplyObserver.startObserving("SUBSYSTEM=power_supply");
  • 當 onUEvent 觸發,會做兩件事,第一,呼叫 update,這個函式會叫用 JNI native_update,去 /sys 底下讀取 battery information,並利用 setIntField、setBooleanField 等函式,設定給 battery service。

  • 在 update 結束後,執行 processValues,處理從底下得到的數值,接著,發 ACTION_BATTERY_CHANGED Intent 給 SystemUI[註] ,更新電量資訊、圖示,如果電量過低,還會發 alert dialog。
  UEvent 是定期發出來,即使電量不變也會收到。另外,在 SystemUI[註] 會用到 framework/base/core/res/res/values/string.xmlconfigs.xml 定義的數值。例如:alert message、battery criteria 等等。

[註] Froyo 是由 StatusBarPolicy 處理 ACTION_BATTERY_CHANGED
參考資料


沒有留言:

 
Blogger Templates