Mendukung perangkat tanpa baterai

Halaman ini menjelaskan cara Android menangani produk yang memiliki baterai yang dapat dilepas atau tidak memiliki baterai internal. Perangkat yang terakhir ini terhubung ke sumber daya eksternal, seperti soket listrik AC atau port USB di perangkat lain.

Apakah ada baterai?

Kode berikut dapat digunakan oleh aplikasi untuk mendeteksi apakah perangkat memiliki baterai:

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

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

Perilaku perangkat tanpa baterai

Jika Android tidak mendeteksi perangkat baterai untuk produk Anda, nilai default terkait baterai berikut akan digunakan. Perhatikan bahwa nilai default telah berubah dalam rilis Android 9. Tabel ini menunjukkan perbedaannya.

Status baterai Android 9 dan yang lebih baru Android 8.1 dan yang lebih lama
Hadir salah true
Status tidak diketahui mengisi daya
Kapasitas yang tersisa 0 100%
Kesehatan tidak diketahui bagus
Status online pengisi daya AC tidak diubah dipaksa menjadi benar (true)

Produsen dapat mengubah setelan default menggunakan driver power_supply kernel atau Health HAL.

Android 9 dan yang lebih baru

Android 9 menghapus beberapa kode sebelumnya untuk perangkat tanpa baterai yang secara default berpura-pura ada baterai, sedang diisi daya hingga 100%, dan dalam kondisi baik dengan pembacaan suhu normal pada termistornya.

Sebagian besar API framework yang menangani informasi ini terus menangani situasi umum seperti sebelumnya: sistem dianggap mengisi daya (yaitu, tidak berjalan dengan daya baterai), dan tidak akan dianggap memiliki baterai lemah. Jika antarmuka pengguna menggambar ikon baterai, ikon tersebut akan muncul dengan tanda seru, dan persentase baterai ditampilkan sebagai 0%. Namun, perangkat tidak akan mati karena baterai lemah, dan tugas yang memerlukan pengisian daya atau baterai yang bagus akan dijadwalkan.

Android 8.1 dan yang lebih lama

Karena status baterai tidak diketahui, API framework Android akan menganggap sistem sedang mengisi daya (atau, tidak berjalan dengan daya baterai) dan tidak akan dianggap memiliki baterai lemah. Jika antarmuka pengguna merender ikon baterai, ikon tersebut akan muncul dengan tanda seru, dan persentase baterai ditampilkan sebagai 0%. Namun, perangkat tidak akan mati karena baterai lemah, dan tugas yang memerlukan pengisian daya atau baterai yang bagus akan dijadwalkan.

Implementasi

Kode default Android 9 mungkin berfungsi dengan baik untuk perangkat Anda, tetapi sebaiknya lakukan perubahan kernel atau HAL untuk mencerminkan secara akurat status daya dan baterai produk Anda, seperti yang dijelaskan sebelumnya. Jika Android 9 dan yang lebih tinggi tidak mendeteksi perangkat pengisi daya kelas catu daya Linux, maka secara default semua jenis pengisi daya (AC, USB, Nirkabel) akan memiliki status offline. Jika semua pengisi daya offline, tetapi tidak ada perangkat baterai yang terdeteksi, sistem akan tetap dianggap sedang mengisi daya dalam arti bahwa sistem berjalan dengan daya eksternal, bukan daya baterai, seperti yang dijelaskan sebelumnya.

Jika produk Anda tidak memiliki baterai dan selalu terhubung ke sumber listrik, sebaiknya terapkan driver pengisi daya class power_supply kernel Linux untuk sumber listrik AC atau USB yang menetapkan atribut online-nya sysfs ke true. Atau, Anda dapat mengonfigurasi properti online pengisi daya AC di HAL Kesehatan untuk perangkat Anda. Untuk mengonfigurasi properti online pengisi daya AC di Health HAL, lihat Health AIDL HAL.

Health HAL kustom ini mengimplementasikan versi Health::getHealthInfo() kustom yang mengubah nilai BatteryProperties.chargerAcOnline = true.

Untuk memulai, salin file hardware/interfaces/health/aidl/default/Health.cpp ke implementasi Health HAL Anda sendiri dan ubah sesuai dengan Health AIDL HAL.