Halaman ini menjelaskan cara Android menangani produk yang memiliki baterai yang dapat dilepas atau tidak memiliki baterai internal. Perangkat yang tidak memiliki baterai internal terhubung ke sumber daya eksternal, seperti stopkontak AC atau port USB di perangkat lain.
Apakah baterai ada?
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 |
|---|---|---|
| Ada | false | true |
| Status | tidak diketahui | mengisi daya baterai |
| Sisa kapasitas | 0 | 100% |
| Kesehatan | tidak diketahui | bagus |
| Status online AC charger | tidak diubah | dipaksa menjadi 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 memiliki baterai, sedang diisi daya 100%, dan dalam kondisi baik dengan pembacaan suhu normal pada termistornya.
Sebagian besar framework API yang menangani informasi ini terus menangani situasi umum yang sama 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 dimatikan karena baterai lemah, dan tugas yang memerlukan pengisian daya atau baterai yang baik akan dijadwalkan.
Android 8.1 dan yang lebih lama
Karena status baterai tidak diketahui, Android framework API akan menganggap sistem 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 dimatikan karena baterai lemah, dan tugas yang memerlukan pengisian daya atau baterai yang baik akan dijadwalkan.
Penerapan
Kode default Android 9 mungkin berfungsi dengan baik untuk perangkat Anda, tetapi sebaiknya lakukan perubahan kernel atau HAL untuk mencerminkan status daya dan baterai produk Anda secara akurat, seperti yang dijelaskan sebelumnya. Jika Android 9 dan yang lebih baru tidak mendeteksi perangkat charger class power supply Linux, secara default semua jenis charger (AC, USB, Nirkabel) akan memiliki status _offline_. Jika semua charger offline, tetapi tidak ada perangkat baterai yang terdeteksi, sistem akan tetap dianggap mengisi daya dalam arti berjalan dengan daya eksternal, bukan daya baterai, seperti yang dijelaskan sebelumnya.
Jika produk Anda tidak memiliki baterai dan selalu terhubung ke sumber daya, sebaiknya terapkan driver charger class power_supply kernel Linux untuk sumber daya AC atau USB yang menetapkan atribut online sysfs ke true. Atau, Anda dapat mengonfigurasi properti online AC charger di Health HAL untuk perangkat Anda. Untuk mengonfigurasi properti online AC charger di Health HAL,
lihat Health AIDL HAL.
Health HAL kustom ini mengimplementasikan versi kustom Health::getHealthInfo() 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.