支援無電池設備

本頁介紹 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進行修改。