Android Sağlık

Android 9, health@1.0 HAL'den büyük bir sürüm yükseltmesi olan android.hardware.health HAL 2.0'ı içerir. Bu yeni HAL aşağıdaki avantajlara sahiptir:

  • Çerçeve ve satıcı kodu arasında daha temiz ayrım.
  • Gereksiz healthd arka plan programını kullanımdan kaldırır.
  • 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, health@2.0 HAL'den küçük bir sürüm yükseltmesi olan android.hardware.health HAL 2.1'i içerir. 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

  • sağlık@1.0 : android.hardware.health@1.0 kısaltması . Android 8.0'da yayınlanan sağlık HIDL HAL sürüm 1.0'ı ifade eder.
  • sağlık@2.0 : android.hardware.health@2.0 kısaltması . Android 9'da yayınlanan sağlık HIDL HAL sürüm 2.0'ı ifade eder.
  • sağlık@2.1 : android.hardware.health@2.1 kısaltması . Android 11'de yayınlanan sağlık HIDL HAL sürüm 2.1'i ifade eder.
  • şarj cihazı : telefon şarj etme animasyonunu görüntüleyen, kapalı modda şarjda çalıştırılabilir dosya.
  • kurtarma : pil bilgilerini alması gereken kurtarma modunda çalışan yürütülebilir dosya.
  • sağlıkd : Android'de çalışan, sağlıkla ilgili bilgileri alan ve çerçeveye sağlayan eski arka plan programı.
  • Storaged : Depolama bilgilerini alan ve çerçeveye sağlayan Android'de çalışan arka plan programı.

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ı, çerçeve tarafından donanımla iletişim kurmak için kullanılır.
  • healthd , libhealthd_android , libbatterymonitor ve libbatteryservice statik olarak bağlanır.
  • Health@1.0-impl, libhealthd'ye statik olarak libhealthd. BOARD .

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

Diğer modlar için:

Android 8.x'te mod dışı şarj etme ve kurtarma modu

Şekil 2. Android 8.x'te sağlık, mod dışı şarj ve kurtarma modu

  • şarj cihazı libhealthd. BOARD , libhealthd_charger ve libbatterymonitor .
  • kurtarma statik olarak 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, Health@2.0 hizmetini hwservicemanager almaya çalışır. 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. Cihazda 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. Android 9'da sağlık, mod dışı ş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)      ] |
+-------------------------------------+
tutucu2 l10n-yer
[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. Ayrıca, daha önce bir bağlayıcı hizmeti olarak sağlanmış olana benzer API'ler sağlar (örneğin, IBatteryPropertiesRegistrar ).

Ana arayüz, IHealth , aşağıdaki işlevleri sağlar:

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

Ek olarak, IHealth , satıcıya özel depolamayla ilgili bilgileri almak için storaged için aşağıdaki yeni API'leri sağlar:

  • getStorageInfo
  • getDiskStats

@2.0::HealthInfo adlı yeni bir yapı, geri aramalar ve getHealthInfo aracılığıyla döndürülür. 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 işlevleri sağlar

  • getHealthConfig : bu HAL'nin yapılandırmasını almak için
  • getHealthInfo_2_1 : getHealthInfo küçük bir sürüm yükseltmesi
  • shouldKeepScreenOn : ekranın şarj modunda açık tutulması gerekip gerekmediğini belirlemek için

Ek olarak, @2.1::IHealth uygulanması, devralınan registerCallback ve unregisterCallback işlevleri için @2.1::IHealthInfoCallback desteklemek için gereklidir. Yeni geri arama arabirimi, devralınan healthInfoChanged işlevi yerine healthInfoChanged_2_1 işlevini kullanarak istemciye sağlık durumu bilgilerini döndürür.

@2.1::HealthInfo adlı yeni bir yapı, geri aramalar ve getHealthInfo_2_1 aracılığıyla döndürülür. 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 hizmetini uygulama hakkında bilgi için, bkz. Sağlık Uygulaması .