支援無電池裝置

本頁面說明 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 以下版本
分享螢幕畫面 true
狀態 未知 充電
剩餘容量 0 100%
健康 未知 良好
AC 充電器線上狀態 未修改 強制設為 true

製造商可以使用核心 power_supply 驅動程式或 Health HAL 變更預設設定。

Android 9 以上版本

Android 9 移除了先前用於無電池裝置的程式碼,這些裝置預設會假裝有電池、正在充電至 100%,且健康狀態良好,並在熱敏電阻上顯示正常的溫度讀數。

處理這類資訊的大多數架構 API 會繼續處理常見情況,與先前相同:系統會視為正在充電 (也就是未使用電池電力運作),不會視為電池電量不足。如果使用者介面繪製電池圖示,則會顯示驚嘆號,電池百分比則會顯示為 0%。但裝置不會因電量不足而關機,且會排定需要充電或電量充足的工作。

Android 8.1 以下版本

由於電池狀態不明,Android 架構 API 會將系統視為「充電中」 (或不使用電池電力運作),而不會視為電池電量不足。如果使用者介面顯示電池圖示,則會顯示驚嘆號,電池百分比則會顯示為 0%。但裝置不會因電量不足而關機,且會排定需要充電或電量充足的工作。

實作

Android 9 預設程式碼可能會在您的裝置上正常運作,但建議您如上所述,修改核心或 HAL,以便準確反映產品的電源和電池狀態。如果 Android 9 以上版本未偵測到 Linux 電源供應器類別充電器裝置,則預設所有充電器類型 (AC、USB、無線) 的狀態都會為「離線」。如果所有充電器都處於離線狀態,但系統未偵測到電池裝置,系統仍會視為正在充電,因為它是使用外部電源而非電池供電,如先前所述。

如果產品沒有電池,且始終連接至電源,建議您為 AC 或 USB 電源實作 Linux 核心 power_supply 類別 charger 驅動程式,將其 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 進行修改。