Mendukung perangkat tanpa baterai

Halaman ini menjelaskan cara Android menangani produk yang memiliki atau tanpa baterai internal. Sebaliknya, perangkat yang terakhir terhubung ke sumber daya eksternal, seperti stopkontak AC atau porta USB di perangkat seluler.

Apakah ada baterai?

Kode berikut dapat digunakan oleh aplikasi untuk mendeteksi apakah perangkat telah adanya 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 setelan 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 paksa ke true

Produsen dapat mengubah setelan {i>default<i} menggunakan {i>kernel<i} catu daya pengemudi atau Health HAL.

Android 9 dan yang lebih baru

Android 9 menghapus beberapa kode sebelumnya untuk mode tanpa baterai perangkat yang secara default berpura-pura ada baterai, sedang diisi dayanya 100%, dan dalam kesehatan baik dengan pembacaan suhu normal pada termistor.

Sebagian besar API framework yang menangani informasi ini terus menangani situasi yang sama seperti sebelumnya: sistem dianggap mengisi daya (yaitu, tidak menggunakan daya baterai), dan tidak akan dipertimbangkan daya baterai lemah. Jika antarmuka pengguna menggambar ikon baterai, muncul dengan tanda seru, dan persentase baterai ditampilkan sebagai 0%. Namun, perangkat tidak akan mati karena daya baterai rendah, dan pekerjaan yang memerlukan pengisian daya atau baterai yang baik 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 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 baik akan dijadwalkan.

Implementasi

Kode default Android 9 mungkin berfungsi dengan baik untuk tetapi disarankan untuk membuat perubahan {i>kernel<i} atau HAL mencerminkan daya dan status baterai produk Anda secara akurat, seperti yang dijelaskan di atas. Jika Android 9 dan yang lebih tinggi tidak mendeteksi catu daya Linux kelas perangkat pengisi daya, maka secara {i>default<i} semua jenis pengisi daya (AC, USB, Wireless) akan memiliki status offline. Jika semua pengisi daya offline tetapi tidak ada perangkat baterai terdeteksi, sistem akan tetap dianggap mengisi daya dalam arti bahwa perangkat berjalan pada jaringan eksternal, bukan daya baterai, seperti yang dijelaskan sebelumnya.

Jika produk Anda tidak memiliki baterai dan selalu terhubung ke sumber daya, sebaiknya terapkan driver pengisi daya class power_supply kernel Linux untuk sumber daya AC atau USB yang menetapkan atribut sysfs online ke true. Atau, Anda dapat mengonfigurasi properti online pengisi daya AC di Health HAL untuk perangkat Anda. Untuk melakukannya, terapkan HAL Kesehatan seperti yang dijelaskan dalam Mengimplementasikan Health 2.0.

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

Untuk memulai, salin file hardware/interfaces/health/2.0/default/Health.cpp implementasi Health HAL Anda sendiri dan memodifikasinya sesuai dengan Health 2.0 BACA.