Android Sağlık

Android 9 içerir android.hardware.health HAL 2.0, health@1.0 HAL'ye bir ana sürüm yükseltme. Bu yeni HAL aşağıdaki avantajlara sahiptir:

  • Çerçeve ve satıcı kodu arasında daha temiz ayrım.
  • Gereksiz karşı çıkan healthd cini.
  • Sağlık bilgileri raporlarında satıcı özelleştirmesi için daha fazla serbestlik derecesi.
  • Yalnızca pilden daha fazla cihaz sağlığı bilgisi.

Android 11 içerir android.hardware.health HAL 2.1, health@2.0 HAL'ye bir alt sürüm yükseltme. Bu yeni HAL aşağıdaki avantajlara sahiptir:

  • Uygulaması daha kolay
  • Mevcut 2.0 HAL API'leri ile daha iyi uyumluluk
  • Kapalı modda şarj kodunda daha iyi Tiz ayrımı
  • Cihazın pil sağlığını gösteren çerçeve için daha iyi destek

Gereksinimler

Android 9 ile başlatılan cihazlar 2.0 HAL sağlamalıdır (ve 1.0 HAL sağlamamalıdır). Android 9 ile başlatılmayan ancak satıcı görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 3'e (Android 9'da yayınlandı) güncellemeyi planlayan cihazlar, mevcut 1.0 HAL uygulamalarını kaldırmalı ve 2.0 HAL sağlamalıdır.

Android 11 ile başlatılan cihazlar 2.1 HAL sağlamalıdır (ve 1.0 veya 2.0 HAL sağlamamalıdır). Android 11 ile başlatılmayan ancak satıcı görüntüsünü Target Framework Uyumluluk Matrisi Sürüm 5'e (Android 11'de yayınlandı) güncellemeyi planlayan cihazlar, mevcut 2.0 HAL uygulamalarını kaldırmalı ve 2.1 HAL sağlamalıdır. Android 11 ile başlatılmayan ve satıcı görüntüsünü güncellemeyi planlamayan cihazların da 2.1 HAL sağlaması önerilir.

AOSP, 2.1 HAL'i ve eski 1.0 HAL'den geçişi uygulamanıza yardımcı olmak için tasarlanmış birden çok yardımcı kitaplık içerir.

terminoloji

  • health@1.0: kısaltma android.hardware.health@1.0 . Android 8.0'da yayınlanan sağlık HIDL HAL sürüm 1.0'ı ifade eder.
  • health@2.0: kısaltma android.hardware.health@2.0 . Android 9'da yayınlanan sağlık HIDL HAL sürüm 2.0'ı ifade eder.
  • health@2.1: kısaltma android.hardware.health@2.1 . Android 11'de yayınlanan sağlık HIDL HAL sürüm 2.1'i ifade eder.
  • Bu görüntüler telefon şarj şarj animasyonu dışı modunda çalıştırılabilir koşu: şarj cihazı.
  • kurtarma: Pil bilgilerini almak zorundadır kurtarma modunda çalıştırılabilir çalışıyor.
  • healthd: Android'de eski cin çalışan o verilerini geri çağırır sağlıkla ilgili bilgi ve iskelet üzerine sağlar.
  • depolanabilir: cin o verilerini geri çağırır depolama bilgileri Android çalışan ve çerçeve sağlar.

Android 8.x'te Sağlık

Android 8.x'te sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı gibi çalışır:

Android 8.x'te Sağlık

Şekil 1. Android 8.x'te Sağlık

Bu şemada:

  • Bir (1) bağlayıcı çağrısı ve bir (1) hwbinder çağrısı, donanımla iletişim kurmak için çerçeve tarafından kullanılır.
  • healthd statik bağlantılar libhealthd_android , libbatterymonitor ve libbatteryservice .
  • health@1.0-impl statik bağlantılar libhealthd. BOARD .

Her pano farklı özelleştirebilirsiniz libhealthd. BOARD ; hangi şarj cihazının, sağlık@1.0-impl'nin ve kurtarma bağlantısının oluşturulduğu yapım sırasında belirlenir.

Diğer modlar için:

Android 8.x'te kapalı modda şarj etme ve kurtarma modu

Android 8.x Şekil 2. Sağlık, kapalı modda şarj ve kurtarma modun

  • Şarj statik bağlantılar libhealthd. BOARD , libhealthd_charger ve libbatterymonitor .
  • kurtarma statik bağlantılar libhealthd. BOARD ve libbatterymonitor .

Android 9'da Sağlık

Android 9'da sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı gibi çalışır: Android 9'da Sağlık

Şekil 3. Android 9'da Sağlık

Çerçeve girişimleri gelen health@2.0 hizmeti almak için hwservicemanager . Başarısız olursa, health@1.0'a çağrı yapar (Android 8.x'te). Eski kod yolu, Android 9 sistem görüntüsünün Android 8.x satıcı görüntüsüyle uyumlu olması için korunur. Aygıtta yalnızca bir hizmet sürümü (1.0 veya 2.0) bulunabileceğinden, çerçeve her iki HAL'den de bilgi almaz.

Diğer modlar için:

Android 9'da mod dışı şarj etme ve kurtarma

Şekil 4. Sağlık Android 9'da, kapalı modda şarj ve kurtarma modu

Android 11'de Sağlık

Android 11'de sağlık bileşeni, aşağıdaki şemada ayrıntılı olarak açıklandığı gibi çalışır:

[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)      ] |
+-------------------------------------+

Sağlık 2.1 uygulaması mevcut değilse, sistem önceki bölümlerde açıklandığı gibi eski kod yoluna geri döner.

Diğer modlar için:

[       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)      ] |
+-------------------------------------+

HAL arayüzü 2.0

Health@2.0 HAL, çerçeveye eski sağlıklı arka plan programı ile aynı işlevselliği sağlar. Aynı zamanda daha önce bir bağlayıcı hizmeti (yani olarak sağlanan neyi healthd benzer API'ler sağlar IBatteryPropertiesRegistrar ).

Ana arayüzü, iHealth , aşağıdaki işlevleri sunar:

  • registerCallback , yerine IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , yerine IBatteryPropertiesRegistrar.unregisterListener
  • update yerine, IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties aşağıda değiştirilir:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Buna ek olarak, IHealth için aşağıdaki yeni API'ler sağlar storaged satıcıya özgü depolama ile ilgili bilgileri almak için:

  • getStorageInfo
  • getDiskStats

Yeni bir yapı, @2.0::HealthInfo , geri aramaları ve üzeri döndürülür getHealthInfo . Bu yapı, aşağıdakiler dahil olmak üzere, health@2.0 HAL aracılığıyla sağlanan tüm cihaz sağlığı bilgilerini içerir:

  • Şarj bilgileri (AC/USB/kablosuz, akım, voltaj vb.)
  • Pil bilgileri (varlık, pil seviyesi, akım, voltaj, şarj, teknoloji vb.)
  • Depolama bilgileri (depolama cihazı bilgileri, disk istatistikleri)

HAL arayüzü 2.1

Health@2.1 HAL, kapalı modda şarjı destekler ve pil hakkında daha fazla bilgi sağlar.

Ana arayüzü, iHealth , aşağıdaki ek fonksiyonlar sağlar

  • getHealthConfig : Bu HAL yapılandırmasını almak için
  • getHealthInfo_2_1 : Bir alt sürüm yükseltme getHealthInfo
  • shouldKeepScreenOn : Ekran şarj modunda tutulmalıdır belirlemek için

Buna ek olarak, uygulanması @2.1::IHealth destek için gereklidir @2.1::IHealthInfoCallback onun miras için registerCallback ve unregisterCallback fonksiyonları. Onun kullanarak istemciye yeni geri arama arayüzü döner sağlık sağlık bilgi healthInfoChanged_2_1 miras yerine işlevini healthInfoChanged fonksiyonu.

Yeni bir yapı, @2.1::HealthInfo , geri aramaları ve üzeri döndürülür getHealthInfo_2_1 . Bu yapı, aşağıdakiler dahil olmak üzere, health@2.0 HAL aracılığıyla sağlanan ek cihaz sağlığı bilgilerini içerir:

  • Pil kapasitesi seviyesi
  • Pil şarj süresi şimdi doluyor (saniye cinsinden)
  • Pil tam şarjlı tasarım kapasitesi (μAh cinsinden)

Sağlık hizmeti uygulanmasıyla ilgili bilgiler için, bkz Uygulama Sağlığını .