Mendukung Perangkat Tanpa Baterai

Halaman ini menjelaskan cara Android menangani produk yang memiliki baterai yang dapat dilepas atau tanpa baterai internal. Perangkat terakhir malah tersambung ke sumber daya eksternal, seperti stopkontak AC atau port USB di perangkat lain.

Apakah ada baterai?

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

```
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, maka nilai default terkait baterai berikut akan digunakan. Perhatikan bahwa defaultnya telah berubah pada rilis Android 9. Tabel ini menunjukkan perbedaannya.

Status baterai Android 9 dan lebih tinggi Android 8.1 dan lebih rendah
Hadiah PALSU BENAR
Status tidak dikenal pengisian daya
Kapasitas yang tersisa 0 100%
Kesehatan tidak dikenal Bagus
Status online pengisi daya AC tidak dimodifikasi dipaksa menjadi kenyataan

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

Android 9 dan lebih tinggi

Android 9 menghapus beberapa kode sebelumnya untuk perangkat tanpa baterai yang secara default berpura-pura memiliki baterai, sedang diisi 100%, dan dalam keadaan sehat dengan pembacaan suhu normal pada termistornya.

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

Android 8.1 dan lebih rendah

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 menampilkan ikon baterai, ikon tersebut akan muncul dengan tanda seru, dan persentase baterai akan ditampilkan sebagai 0%. Namun perangkat tidak akan mati karena baterai lemah, dan pekerjaan yang memerlukan pengisian daya atau baterai yang baik akan dijadwalkan.

Penerapan

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

Jika produk Anda tidak memiliki baterai dan selalu tersambung ke sumber listrik, sebaiknya terapkan driver pengisi daya kelas power_supply kernel Linux untuk sumber daya AC atau USB yang menyetel atribut sysfs online ke true . Atau Anda dapat mengonfigurasi properti online pengisi daya AC di HAL Kesehatan untuk perangkat Anda. Untuk melakukan hal ini, terapkan HAL Kesehatan seperti yang dijelaskan dalam Implementasi Kesehatan 2.0 .

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

Untuk memulai, salin file hardware/interfaces/health/2.0/default/Health.cpp ke implementasi Health HAL Anda sendiri dan modifikasi sesuai dengan README Kesehatan 2.0 .