支持無電池設備

本頁介紹 Android 如何處理具有可拆卸電池或沒有內置電池的產品。後者設備改為連接到外部電源,例如交流電源插座或另一設備上的 USB 端口。

有電池嗎?

應用程序可以使用以下代碼來檢測設備當前是否有電池:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

無電池設備行為

如果 Android 沒有為您的產品檢測到電池設備,則使用以下與電池相關的默認值。請注意,Android 9 版本中的默認設置已更改。此表顯示了差異。

電池狀態安卓 9 及更高版本安卓 8.1 及更低版本
展示錯誤的真的
狀態未知收費
剩餘容量0 100%
健康未知好的
交流充電器在線狀態未修改被迫為真

製造商可以使用內核power_supply驅動程序或Health HAL更改默認設置。

安卓 9 及更高版本

Android 9 刪除了一些以前的無電池設備代碼,這些代碼默認情況下會假裝有電池,正在以 100% 的速度充電,並且熱敏電阻上的溫度讀數正常,運行狀況良好。

大多數處理此信息的框架 API 繼續處理與以前相同的常見情況:系統將被視為正在充電(即,不使用電池供電),並且不會被視為電池電量不足。如果用戶界面繪製了電池圖標,它會出現一個感嘆號,並且電池百分比將顯示為 0%。但設備不會因電池電量不足而關閉,需要充電或電池電量充足的作業將被安排。

安卓 8.1 及更低版本

由於電池狀態未知,Android 框架 API 將認為系統正在充電(或者,不使用電池供電)並且不會被認為電池電量不足。如果用戶界面呈現電池圖標,它會出現一個感嘆號,並且電池百分比將顯示為 0%。但設備不會因電池電量不足而關閉,需要充電或電池電量充足的作業將被安排。

執行

Android 9 默認代碼可能適用於您的設備,但建議您更改內核或 HAL 以準確反映您產品的電源和電池狀態,如上所述。如果 Android 9 及更高版本未檢測到Linux 電源類充電器設備,則默認情況下所有充電器類型(AC、USB、無線)將處於離線狀態。如果所有充電器都處於離線狀態但未檢測到電池設備,則係統仍將被視為正在充電,因為它是在外部而不是電池電源上運行,如前所述。

如果您的產品沒有電池並且始終連接到電源,最好為 AC 或 USB 電源實現 Linux 內核 power_supply 類充電器驅動程序,將其online sysfs屬性設置為true 。或者,您可以在設備的 Health HAL 中配置 AC 充電器在線屬性。為此,請按照實施 Health 2.0中的說明實施 Health HAL。

此自定義 Health HAL 實現自定義版本的Health::getHealthInfo()修改BatteryProperties.chargerAcOnline = true的值。

首先,將文件hardware/interfaces/health/2.0/default/Health.cpp複製到您自己的 Health HAL 實現中,並根據Health 2.0 README對其進行修改。