本頁面說明 Android 如何處理包含可拆式電池或沒有內部電池的產品。後者則改連接外部電源,例如 AC 電源插座或另一部裝置的 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% |
健康狀態 | 不明 | 佳 |
AC 充電器上線狀態 | 未修改 | 強制設為 true |
製造商可以使用核心 power_supply 驅動程式或健康狀態 HAL 修改預設設定。
Android 9 以上版本
針對預設不電池的裝置,Android 9 會移除某些先前的程式碼,這些程式碼預設為預先使用電池供電、在 100% 充電,且其熱能讀取正常溫度讀數正常。
處理這些資訊的大多數架構 API 仍會照常處理常見情況:系統會視為「充電」 (也就是不會用電池電力執行),所以並不會視為低電量。如果使用者介面繪製電池圖示,畫面上會顯示驚嘆號,而電量百分比會顯示為 0%。不過,裝置因為電量不足而無法關機,且系統會排定需要充電或電池電力充足的工作。
Android 8.1 以下版本
由於電池狀態不明,Android 架構 API 會視為系統充電 (或未使用電池電源),因此不會視為電量偏低。如果使用者介面顯示電池圖示,系統會顯示驚嘆號,而電量百分比會顯示為 0%。不過,裝置不會因電量不足而關機,且已排定需要充電或電量充足的工作。
實作
Android 9 預設程式碼或許能正常運作,但建議您進行核心或 HAL 變更,準確反映產品的電池和電池狀態 (如前文所述)。如果 Android 9 以上版本未偵測到 Linux 電源供應器類別充電器裝置,根據預設,所有充電器類型 (AC、USB、Wireless) 的狀態都會是「離線」。如上所述,如果所有充電器都離線,但沒有偵測到電池裝置,系統仍會將系統視為在外部 (而非電池電力) 進行充電。
如果產品沒有電池且會一直接上電源,建議您針對 AC 或 USB 電源實作 Linux kernel power_supply 類別的 charger 驅動程式,將其 online sysfs
屬性設為 true
。您也可以在裝置的 Health HAL 中設定 AC 充電器線上屬性。如要在 Health HAL 中設定 AC 充電器線上屬性,請參閱 Health AIDL HAL。
這個自訂 Health HAL 會實作 Health::getHealthInfo()
的自訂版本,用於修改 BatteryProperties.chargerAcOnline = true
的值。
如要開始使用,請將檔案 hardware/interfaces/health/aidl/default/Health.cpp
複製到自己的 Health HAL 實作項目,並根據 Health AIDL HAL 進行修改。