Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Android Health

Android 9 bao gồm android.hardware.health HAL 2.0, một phiên bản nâng cấp lớn từ health@1.0 HAL. HAL mới này có những ưu điểm sau:

  • Sự tách biệt rõ ràng hơn giữa khung và mã của nhà cung cấp.
  • Deprecates sự không cần thiết healthd daemon.
  • Nhiều mức độ tự do hơn để tùy chỉnh nhà cung cấp trong các báo cáo thông tin sức khỏe.
  • Nhiều thông tin về tình trạng của thiết bị hơn chỉ là pin.

Android 11 bao gồm android.hardware.health HAL 2.1, một phiên bản nâng cấp nhỏ từ health@2.0 HAL. HAL mới này có những ưu điểm sau:

  • Dễ thực hiện hơn
  • Tuân thủ tốt hơn với các API 2.0 HAL hiện có
  • Tách tiếng Treble tốt hơn trong mã sạc ngoài chế độ
  • Hỗ trợ tốt hơn cho khung cho biết tình trạng pin của thiết bị

Yêu cầu

Các thiết bị khởi chạy với Android 9 phải cung cấp 2.0 HAL (và không được cung cấp 1.0 HAL). Các thiết bị không khởi chạy với Android 9 nhưng có kế hoạch cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 3 (được phát hành trong Android 9) phải xóa các triển khai 1.0 HAL hiện có và cung cấp 2.0 HAL.

Các thiết bị khởi chạy với Android 11 phải cung cấp 2.1 HAL (và không được cung cấp 1.0 hoặc 2.0 HAL). Các thiết bị không khởi chạy với Android 11 nhưng dự định cập nhật hình ảnh nhà cung cấp lên Ma trận tương thích khung mục tiêu Phiên bản 5 (được phát hành trong Android 11) phải xóa các triển khai 2.0 HAL hiện có và cung cấp 2.1 HAL. Các thiết bị không chạy Android 11 và không có kế hoạch cập nhật hình ảnh nhà cung cấp cũng được khuyến nghị cung cấp 2.1 HAL.

AOSP bao gồm nhiều thư viện trợ giúp được thiết kế để giúp bạn triển khai 2.1 HAL và quá trình chuyển đổi từ 1.0 HAL cũ.

Thuật ngữ

  • health@1.0: viết tắt của android.hardware.health@1.0 . Đề cập đến tình trạng HIDL HAL phiên bản 1.0 được phát hành trong Android 8.0.
  • health@2.0: viết tắt của android.hardware.health@2.0 . Đề cập đến tình trạng HIDL HAL phiên bản 2.0 được phát hành trong Android 9.
  • health@2.1: viết tắt của android.hardware.health@2.1 . Đề cập đến tình trạng HIDL HAL phiên bản 2.1 được phát hành trong Android 11.
  • sạc: chạy thực thi ở chế độ off-sạc mà hiển thị các hình ảnh động điện thoại sạc.
  • phục hồi: chạy thực thi trong chế độ phục hồi mà phải lấy thông tin pin.
  • healthd: di sản daemon chạy trong Android mà lấy thông tin sức khỏe có liên quan và cung cấp cho nó để khuôn khổ.
  • storaged: daemon chạy trong Android mà thông tin lấy lưu trữ và cung cấp nó cho khung.

Sức khỏe trong Android 8.x

Trong Android 8.x, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:

Sức khỏe trong Android 8.x

Hình 1. Sức khỏe trong Android 8.x

Trong sơ đồ này:

  • Một (1) cuộc gọi liên kết và một (1) cuộc gọi hwbinder được khuôn khổ sử dụng để giao tiếp với phần cứng.
  • healthd tĩnh liên kết đến libhealthd_android , libbatterymonitor , và libbatteryservice .
  • health@1.0-impl tĩnh liên kết đến libhealthd. BOARD .

Mỗi hội đồng quản trị có thể tùy chỉnh một khác nhau libhealthd. BOARD ; nó được xác định tại thời điểm xây dựng liên kết tới bộ sạc, health@1.0-impl và khôi phục nào.

Đối với các chế độ khác:

Chế độ ký tự và khôi phục ở chế độ tắt trong Android 8.x

Hình 2. Sức khỏe trong Android 8.x, tắt chế độ sạc và chế độ phục hồi

  • sạc tĩnh liên kết đến libhealthd. BOARD , libhealthd_chargerlibbatterymonitor .
  • phục hồi tĩnh liên kết đến libhealthd. BOARDlibbatterymonitor .

Sức khỏe trong Android 9

Trong Android 9, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau: Sức khỏe trong Android 9

Hình 3. Sức khỏe trong Android 9

Những nỗ lực khuôn khổ để lấy dịch vụ health@2.0 từ hwservicemanager . Nếu không thành công, nó sẽ gọi vào health@1.0 (trong Android 8.x). Đường dẫn mã kế thừa được giữ lại để hình ảnh hệ thống Android 9 tương thích với hình ảnh nhà cung cấp Android 8.x. Khuôn khổ không truy xuất thông tin từ cả hai HAL vì chỉ có một phiên bản dịch vụ (1.0 hoặc 2.0) có thể tồn tại trên thiết bị.

Đối với các chế độ khác:

Ghi nhớ và khôi phục ở chế độ tắt trong Android 9

Hình 4. Sức khỏe trong Android 9, tắt chế độ sạc và chế độ phục hồi

Sức khỏe trong Android 11

Trong Android 11, thành phần sức khỏe hoạt động như chi tiết trong sơ đồ sau:

[system]
    | getService()
    V
[health@2.1-service]
        | getService(stub=true)
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

Nếu triển khai tình trạng 2.1 không tồn tại, hệ thống sẽ quay trở lại đường dẫn mã kế thừa như được mô tả trong các phần trước

Đối với các chế độ khác:

[       charger          ]
    | getService()      |  (legacy code path)
    V                   +-------------------------------------------------+
[health@2.1-service]                                                      |
        | getService(stub=true)                                           |
        V                                                                 |
[      health@2.0-impl-2.1-<device>.so      ]                             |
        |                                  | (device-dependent linkage)   |
        V                                  V                              |
+---------Helper libs for impl--------+   [libhealthd.device]             |
| [libhealthloop (uevent, wakealarm)] |                                   |
| [libhealth2impl (IHealth impl)    ] | <---------------------------------+
| [libbatterymonitor (battery)      ] |
+-------------------------------------+
[recovery]
        | getService() w/o hwservicemanager
        V
[      health@2.0-impl-2.1-<device>.so      ]
        |                                  | (device-dependent linkage)
        V                                  V
+---------Helper libs for impl--------+   [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl)    ] |
| [libbatterymonitor (battery)      ] |
+-------------------------------------+

Giao diện HAL 2.0

Health@2.0 HAL cung cấp chức năng tương tự cho khuôn khổ như daemon healthd cũ. Nó cũng cung cấp các API tương tự như những gì healthd trước đây được cung cấp như một dịch vụ chất kết dính (tức là IBatteryPropertiesRegistrar ).

Giao diện chính, IHealth , cung cấp các chức năng sau:

  • registerCallback , để thay thế IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , để thay thế IBatteryPropertiesRegistrar.unregisterListener
  • update , để thay thế IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties được thay thế bởi những điều sau đây:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Bên cạnh đó, IHealth cung cấp các API mới sau cho storaged để lấy thông tin liên quan lưu trữ nhà cung cấp cụ thể:

  • getStorageInfo
  • getDiskStats

Một cấu trúc mới, @2.0::HealthInfo , được trả về thông qua callbacks và getHealthInfo . Cấu trúc này chứa tất cả thông tin về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:

  • Thông tin sạc (AC / USB / không dây, dòng điện, điện áp, v.v.)
  • Thông tin về pin (sự hiện diện, mức pin, dòng điện, điện áp, mức sạc, công nghệ, v.v.)
  • Thông tin lưu trữ (thông tin thiết bị lưu trữ, thống kê đĩa)

Giao diện HAL 2.1

Health@2.1 HAL hỗ trợ sạc ở chế độ tắt và cung cấp thêm thông tin về pin.

Giao diện chính, IHealth , cung cấp các chức năng bổ sung sau đây

  • getHealthConfig : để lấy cấu hình của HAL này
  • getHealthInfo_2_1 : một phiên bản nâng cấp nhỏ để getHealthInfo
  • shouldKeepScreenOn : để xác định xem màn hình nên được giữ trên trong chế độ sạc

Bên cạnh đó, việc thực hiện @2.1::IHealth là cần thiết để hỗ trợ @2.1::IHealthInfoCallback cho thừa hưởng của nó registerCallbackunregisterCallback chức năng. Trở về giao diện gọi lại thông tin y tế sức khỏe mới cho khách hàng sử dụng nó healthInfoChanged_2_1 chức năng thay vì thừa hưởng healthInfoChanged chức năng.

Một cấu trúc mới, @2.1::HealthInfo , được trả về thông qua callbacks và getHealthInfo_2_1 . Cấu trúc này chứa thông tin bổ sung về tình trạng của thiết bị có sẵn qua health@2.0 HAL, bao gồm:

  • Mức dung lượng pin
  • Thời gian sạc đầy pin ngay bây giờ (tính bằng giây)
  • Dung lượng thiết kế sạc đầy pin (tính bằng μAh)

Để biết thông tin về việc thực hiện các dịch vụ y tế, xem Triển khai sức khỏe .