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 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 có pin
Nếu Android không phát hiện 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. 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 |
Nhà sản xuất có thể thay đổi chế độ cài đặt mặc định bằng cách sử dụng một nhân hệ điều hành power_supply trình điều khiển hoặc HAL (Lớp trừu tượng phần cứng) cho ứng dụng sức khoẻ.
Android 9 trở lên
Android 9 xoá một số mã trước đây cho các thiết bị không có pin. Theo mặc định, các thiết bị này giả vờ có pin, đang sạc 100% và có tình trạng tốt với nhiệt độ đọc 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 đượ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 yêu cầu sạc hoặc pin tốt sẽ đượ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 đang sạc (hoặc không chạy bằng pin) và sẽ không coi là pin yếu. Nếu giao diện người dùng hiển thị biểu tượng pin, thì biểu tượng này sẽ xuất hiện cùng dấu chấm than và 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 ở 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 đúng cách cho thiết bị của bạn, nhưng bạn nên thay đổi hạt nhân hoặc HAL để phản ánh chính xác trạng thái pin và nguồn 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 lớp nguồn điện Linux, thì theo mặc định, tất cả các loại 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 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 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 charger (bộ sạc) lớp power_supply của hạt nhân Linux cho nguồn điện xoay chiều hoặc USB. Trình điều khiển này sẽ đặt thuộc tính sysfs
online (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 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.