本頁介紹 Android 如何處理具有可拆卸電池或無內建電池的產品。後者的裝置改為連接到外部電源,例如交流電源插座或另一裝置上的 USB 連接埠。
是否有電池?
應用程式可以使用以下程式碼來檢測設備是否有電池:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
無電池設備行為
如果 Android 未偵測到您產品的電池設備,請使用以下與電池相關的預設值。請注意,預設設定在 Android 9 版本中已變更。該表顯示了差異。
電池狀態 | Android 9 及更高版本 | Android 8.1 及更低版本 |
---|---|---|
展示 | 錯誤的 | 真的 |
地位 | 未知 | 收費 |
剩餘容量 | 0 | 100% |
健康 | 未知 | 好的 |
交流充電器在線狀態 | 未修改 | 被迫為真 |
製造商可以使用核心power_supply驅動程式或Health HAL更改預設設定。
Android 9 及更高版本
Android 9 刪除了一些先前針對無電池設備的代碼,這些設備默認情況下假裝電池存在、正在以 100% 充電,並且運行狀況良好,熱敏電阻上的溫度讀數正常。
大多數處理此資訊的框架 API 繼續處理與以前相同的常見情況:系統被視為正在充電(即,不使用電池電源運行),並且不會被視為電池電量低。如果使用者介面繪製了電池圖標,則會出現一個感嘆號,並且電池百分比顯示為0%。但設備不會因電池電量不足而關閉,並且會安排需要充電或電池電量充足的作業。
Android 8.1 及更低版本
由於電池狀態未知,Android 框架 API 將認為系統正在充電(或不使用電池電源運行),並且不會被認為電池電量低。如果使用者介面呈現電池圖標,則會顯示一個感嘆號,並且電池百分比顯示為 0%。但設備不會因電池電量不足而關閉,並且會安排需要充電或電池電量充足的作業。
執行
Android 9 預設程式碼可能適用於您的設備,但建議對核心或 HAL 進行更改,以準確反映您產品的電源和電池狀態,如上所述。如果 Android 9 及更高版本未偵測到Linux 電源類充電器設備,則預設所有充電器類型(交流電、USB、無線)都將處於離線狀態。如果所有充電器都離線,但沒有偵測到電池設備,則系統仍將被視為正在充電,因為系統正在使用外部電源而不是電池電源運行,如前所述。
如果您的產品沒有電池並且始終連接到電源,最好為 AC 或 USB 電源實現 Linux 核心 power_supply 類充電器驅動程序,將其在線sysfs
屬性設為true
。或者,您可以在裝置的 Health HAL 中設定交流充電器線上屬性。為此,請實施 Health HAL,如實施 Health 2.0所述。
此自訂 Health HAL 實作Health::getHealthInfo()
的自訂版本,該版本修改BatteryProperties.chargerAcOnline = true
的值。
首先,將檔案hardware/interfaces/health/2.0/default/Health.cpp
複製到您自己的 Health HAL 實現,並根據Health 2.0 README進行修改。