支持無電池設備

本頁面介紹了 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驅動程序或健康HAL

Android 9 及更高版本

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

大多數框架API是處理這個信息繼續與先前處理常見的情況:系統會被認為是充電(即電池電源不運行),並不會被認為具有低電量。如果用戶界面繪製了電池圖標,它會出現一個感嘆號,電池百分比將顯示為 0%。但是設備不會因為電池電量低而關機,需要充電或電池好的作業會被安排。

Android 8.1 及更低版本

由於電池狀態未知,Android的框架API將考慮對系統進行充電(或電池供電不運行),並不會被認為具有低電量。如果用戶界面呈現電池圖標,它會出現一個感嘆號,電池百分比將顯示為 0%。但是設備不會因為電池電量低而關機,需要充電或電池好的作業會被安排。

執行

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

如果你的產品沒有一個電池,並始終連接到電源,這是最好的實現Linux內核為AC或將其在線USB電源POWER_SUPPLY類充電器驅動sysfs屬性為true 。或者,您可以在 Health HAL 中為您的設備配置交流充電器在線屬性。要做到這一點實現一個健康HAL中所述實施健康2.0

這種定制健康HAL實現的定制版本Health::getHealthInfo()來修改的值BatteryProperties.chargerAcOnline = true

要開始,文件複製hardware/interfaces/health/2.0/default/Health.cpp到自己的健康HAL實施,並根據修改健康2.0自述