Trang này mô tả cách Android xử lý các sản phẩm có pin tháo rời hoặc không có pin bên trong. Thay vào đó, các thiết bị sau được kết nối với nguồn điện bên ngoài, chẳng hạn như ổ cắm điện AC hoặc cổng USB trên một thiết bị khác.
Có pin không?
Các ứng dụng có thể dùng mã sau để phát hiện xem thiết bị có pin hay không:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Hành vi của thiết bị không có pin
Nếu Android không phát hiện thấy thiết bị pin cho sản phẩm của bạn, thì các giá trị mặc định sau đây liên quan đến pin sẽ được dùng. Xin lưu ý rằng các giá trị mặc định đã thay đổi trong bản phát hành Android 9. Bảng này cho thấy sự khác biệt.
Trạng thái pin | Android 9 trở lên | Android 8.1 trở xuống |
---|---|---|
Trình bày | false | true |
Trạng thái | không rõ | đang sạc |
Dung lượng còn lại | 0 | 100% |
Sức khoẻ | không rõ | tốt |
Trạng thái trực tuyến của bộ sạc AC | không được sửa đổi | buộc thành true |
Nhà sản xuất có thể thay đổi chế độ cài đặt mặc định bằng trình điều khiển power_supply của nhân hoặc Health HAL.
Android 9 trở lên
Android 9 xoá một số mã trước đó cho các thiết bị không có pin. Theo mặc định, mã này giả định rằng có pin, pin đang được sạc ở mức 100% và pin có tình trạng tốt với chỉ số nhiệt độ bình thường trên điện trở nhiệt.
Hầu hết các API khung xử lý thông tin này vẫn xử lý các tình huống phổ biến như trước đây: hệ thống được coi là đang sạc (tức là không chạy bằng nguồn pin) và sẽ không được coi là có pin yếu. Nếu giao diện người dùng vẽ biểu tượng pin, thì biểu tượng này sẽ xuất hiện kèm theo dấu chấm than và tỷ lệ phần trăm pin sẽ hiển thị là 0%. Tuy nhiên, thiết bị sẽ không tắt do pin yếu và các tác vụ cần sạc hoặc có pin đầy sẽ được lên lịch.
Android 8.1 trở xuống
Vì trạng thái pin không xác định, nên các API khung Android sẽ coi hệ thống là đang sạc (hoặc không chạy bằng nguồn pin) và sẽ không được coi là có pin yếu. Nếu giao diện người dùng hiển thị biểu tượng pin, biểu tượng này sẽ xuất hiện kèm theo dấu chấm than và tỷ lệ phần trăm pin sẽ hiển thị là 0%. Tuy nhiên, thiết bị sẽ không tắt do pin yếu và các công việc cần sạc hoặc pin còn nhiều sẽ được lên lịch.
Triển khai
Mã mặc định của Android 9 có thể hoạt động đúng cách cho thiết bị của bạn, nhưng bạn nên thực hiện thay đổi đối với kernel hoặc HAL để phản ánh chính xác trạng thái nguồn và pin cho sản phẩm của mình, như mô tả trước đó. Nếu Android 9 trở lên không phát hiện thấy thiết bị sạc lớp nguồn điện Linux, thì theo mặc định, tất cả các loại bộ sạc (AC, USB, Không dây) sẽ có trạng thái không hoạt động. Nếu tất cả bộ sạc đều không kết nối mạng nhưng không phát hiện thấy thiết bị pin nào, thì hệ thống vẫn được coi là đang sạc theo nghĩa là hệ thống đang chạy bằng nguồn điện bên ngoài chứ không phải nguồn pin, như mô tả trước đó.
Nếu sản phẩm của bạn không có pin và luôn kết nối với nguồn điện, thì tốt nhất là bạn nên triển khai trình điều khiển bộ sạc lớp power_supply của nhân Linux cho nguồn điện AC hoặc USB đặt thuộc tính online sysfs
thành true
. Hoặc bạn có thể định cấu hình thuộc tính trực tuyến của bộ sạc AC trong Health HAL cho thiết bị của mình. Để định cấu hình thuộc tính trực tuyến của bộ sạc AC trong Health HAL, hãy tham khảo Health AIDL HAL.
Health HAL tuỳ chỉnh này triển khai một phiên bản tuỳ chỉnh của Health::getHealthInfo()
để sửa đổi giá trị của BatteryProperties.chargerAcOnline = true
.
Để bắt đầu, hãy sao chép tệp hardware/interfaces/health/aidl/default/Health.cpp
vào phương thức triển khai Health HAL của riêng bạn và sửa đổi tệp đó theo Health AIDL HAL.