Hỗ trợ các thiết bị không dùng pin

Trang này mô tả cách Android xử lý các sản phẩm có pin 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 thiết bị khác.

Có pin không?

Các ứng dụng có thể sử dụng mã sau đây để phát hiện xem thiết bị hiện 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 dùng 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 liên quan đến pin sau đây sẽ được sử dụng. Lưu ý 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
Hiện tại SAI ĐÚNG VẬY
Trạng thái không xác định sạc
Công suất còn lại 0 100%
Sức khỏe không xác định Tốt
Trạng thái trực tuyến của bộ sạc AC không được sửa đổi buộc phải đúng

Các nhà sản xuất có thể thay đổi cài đặt mặc định bằng trình điều khiển power_supply kernel hoặc Health HAL .

Android 9 trở lên

Android 9 loại bỏ một số mã trước đây dành cho các thiết bị không dùng pin mà theo mặc định giả vờ có pin, đang được sạc ở mức 100% và ở trạng thái tốt với nhiệt độ bình thường trên nhiệt điện trở.

Hầu hết các API khung xử lý thông tin này tiếp tục xử lý các tình huống phổ biến giống như trước đây: hệ thống sẽ được coi là đang sạc (nghĩa là không chạy bằng nguồn pin) và sẽ không được coi là sắp hết pin. Nếu giao diện người dùng vẽ biểu tượng pin sẽ xuất hiện kèm dấu chấm than, phần trăm pin sẽ hiển thị là 0%. Nhưng máy sẽ không tắt do pin yếu và các công việc cần sạc hoặc pin tốt 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 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 bị coi là có pin yếu. Nếu giao diện người dùng hiển thị biểu tượng pin, nó sẽ xuất hiện kèm theo dấu chấm than và phần trăm pin sẽ hiển thị là 0%. Nhưng máy sẽ không tắt do pin yếu và các công việc cần sạc hoặc pin tốt sẽ được lên lịch.

Thực hiện

Mã mặc định của Android 9 có thể hoạt động bình thường cho thiết bị của bạn nhưng bạn nên thực hiện thay đổ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ên. Nếu Android 9 trở lên không phát hiện được thiết bị sạc cấp nguồn Linux thì theo mặc định tất cả các loại bộ sạc (AC, USB, Wireless) sẽ có trạng thái ngoại tuyến . Nếu tất cả các bộ sạc đều ngoại tuyến nhưng không phát hiện thấy thiết bị pin nào thì hệ thống sẽ vẫn được coi là đang sạc theo nghĩa là nó đang chạy bằng nguồn bên ngoài chứ không phải nguồn pin như mô tả trước đây.

Nếu sản phẩm của bạn không có pin và luôn được kết nối với nguồn điện, tốt nhất 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 sysfs trực tuyến của nó 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. Để thực hiện điều này, hãy triển khai Health HAL như được mô tả trong Triển khai Health 2.0 .

Health HAL tùy chỉnh này triển khai phiên bản tùy 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/2.0/default/Health.cpp vào triển khai Health HAL của riêng bạn và sửa đổi nó theo Health 2.0 README .