Hỗ trợ 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 tháo rời hoặc không có pin bên trong. Thay vào đó, các thiết bị sau sẽ đượ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ể sử 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 dùng pin

Nếu Android không phát hiện thấy thiết bị pin nào 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. 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 chưa được sửa đổi buộc thành true

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

Android 9 trở lên

Android 9 sẽ xoá 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ờ là có pin nhưng đang được sạc ở mức 100% và ở tình trạng tốt với chỉ số nhiệt độ bình thường trên máy điều nhiệt.

Hầu hết các API khung xử lý thông tin này đều tiếp tục xử lý các tình huống phổ biến giống 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 bị coi là sắp hết pin. Nếu giao diện người dùng vẽ biểu tượng pin, thì biểu tượng đó sẽ xuất hiện cùng với một 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 đòi hỏi sạc hoặc pin tốt đã được lên lịch.

Android 8.1 trở xuống

Vì không xác định được trạng thái pin, 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à sắp hết pin. Nếu giao diện người dùng hiển thị biểu tượng pin, biểu tượng đó sẽ xuất hiện với một dấu chấm than và tỷ lệ phần trăm pin được 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 tốt đã được lên lịch.

Triển khai

Mã mặc định của Android 9 có thể hoạt động bình thường trên thiết bị của bạn, nhưng bạn nên thay đổi nhân hệ điều hành hoặc HAL để phản ánh chính xác nguồn và trạng thái pin của sản phẩm, như mô tả ở trên. Nếu Android 9 trở lên không phát hiện thấy thiết bị sạc loại nguồn cung cấp điện cho 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 ngoại tuyến. 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 sẽ được coi là đang sạc vì nó đang chạy trên nguồ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, tốt nhất bạn nên triển khai trình điều khiển bộ sạc class power_supply của Linux cho nguồn điện AC hoặc USB mà sẽ đặt thuộc tính sysfs trực tuyế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 việc này, hãy triển khai HAL (Lớp trừu tượng phần cứng) cho sức khoẻ như mô tả trong bài viết Triển khai Health 2.0.

HAL Health tuỳ chỉnh này triển khai phiên bản Health::getHealthInfo() tuỳ chỉnh có chức năng 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 phần triển khai Health HAL của riêng bạn và sửa đổi tệp đó theo Health 2.0 README.