本頁面說明 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 以下版本 |
---|---|---|
分享螢幕畫面 | false | 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 類別充電器驅動程式,將其 online sysfs
屬性設為 true
。或者,您可以在裝置的健康 HAL 中設定 AC 充電器線上屬性。如要在健康狀態 HAL 中設定 AC 充電器線上屬性,請參閱健康狀態 AIDL HAL。
這個自訂健康狀態 HAL 會實作自訂版本的 Health::getHealthInfo()
,修改 BatteryProperties.chargerAcOnline = true
的值。
如要開始,請將檔案 hardware/interfaces/health/aidl/default/Health.cpp
複製到您自己的健康狀態 HAL 實作項目,並根據健康狀態 AIDL HAL 進行修改。