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ó thể 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 nguồn điện khác thiết bị.

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 được thiết bị dùng pin cho sản phẩm của bạn, thì điều sau giá trị mặc định liên quan đến pin 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 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 cách sử dụng trình điều khiển hạt nhân power_supply hoặc Health HAL.

Android 9 trở lên

Android 9 xoá một số mã trước đây liên quan đến tình trạng không dùng pin các thiết bị theo mặc định giả vờ có pin đang được sạc ở mức 100% và có sức khoẻ tốt với chỉ số thân nhiệt bình thường 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 được coi là đang sạc (tức là không chạy bằng pin) và sẽ không được coi là pin yếu. Nếu giao diện người dùng vẽ biểu tượng pin, xuất hiện cùng với 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 đòi hỏi thời điểm sạc hoặc mức pin tốt đã được lên lịch.

Android 8.1 trở xuống

Vì trạng thái pin không xác định được nên API khung Android sẽ cân nhắc hệ thống đang sạc (hoặc không chạy bằng nguồn pin) và sẽ không được coi là pin yếu. Nếu giao diện người dùng hiển thị pin biểu tượng, nó sẽ xuất hiện với một dấu chấm than và tỷ lệ phần trăm pin là đượ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 ở mức 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 đối với thiết bị, nhưng bạn nên thay đổi nhân hoặc thay đổi HAL thành phản ánh chính xác trạng thái nguồn và pin của sản phẩm, như được mô tả ở trên. Nếu Android 9 trở lên không phát hiện thấy nguồn điện cho Linux lớp thiết bị sạc, thì theo mặc định, tất cả các loại bộ sạc (AC, USB, Không dây) sẽ có 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 có thiết bị dùng pin thì hệ thống vẫn sẽ được coi là đang sạc theo cách thiết bị đang chạy trên nguồn bên ngoài, không phải nguồn pin, như được mô tả trước đó.

Nếu sản phẩm không có pin và luôn kết nối với nguồn điện nguồn, tốt nhất bạn nên triển khai bộ sạc class power_supply của Linux trình điều khiển cho nguồn điện AC hoặc USB để đặt thuộc tính sysfs trực tuyến đến 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 bạn. Để thực hiện việc này, hãy triển khai lớp trừu tượng phần cứng (HAL) cho sức khoẻ như mô tả trong phần Triển khai Sức khoẻ 2.0.

HAL Health 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/2.0/default/Health.cpp cho việc triển khai Health HAL của riêng bạn và sửa đổi theo Health 2.0 ĐỌC.