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 daemon'unu healthd .
  • Sağlık bilgisi raporlarında satıcı özelleştirmesi için daha fazla özgürlük.
  • 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 uyum
  • Kapalı mod şarj kodunda daha iyi Tiz ayrımı
  • Cihazın pil sağlığını belirtmek için ç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ü Hedef Çerçeve Uyumluluk Matrisi Sürüm 3'e (Android 9'da piyasaya sürüldü) 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ü Hedef Çerçeve Uyumluluk Matrisi Sürüm 5'e (Android 11'de piyasaya sürüldü) 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ı imajını güncellemeyi planlamayan cihazların da 2.1 HAL sağlamaları önerilir.

AOSP, 2.1 HAL'ı 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 : android.hardware.health@1.0 kısaltması. Android 8.0'da yayınlanan HIDL HAL sürüm 1.0'ı ifade eder.
  • health@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.
  • health@2.1 : android.hardware.health@2.1 kısaltması. Android 11'de yayınlanan HIDL HAL sürüm 2.1'i ifade eder.
  • şarj cihazı : telefon şarj animasyonunu görüntüleyen kapalı modda şarjda çalışan yürütülebilir.
  • kurtarma : pil bilgilerini alması gereken kurtarma modunda çalışan yürütülebilir dosya.
  • healthd : sağlıkla ilgili bilgileri alan ve bunu çerçeveye sağlayan, Android'de çalışan eski arka plan programı.
  • depolanan : Android'de çalışan, depolama bilgilerini alan ve çerçeveye sağlayan daemon.

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ığı şekilde çalışır:

Android 8.x'te sağlık

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

Bu diyagramda:

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

Her pano farklı bir libhealthd. BOARD özelleştirebilir libhealthd. BOARD ; şarj cihazının, health@1.0-impl'nin ve kurtarma bağlantısının derleme sırasında belirlenir.

Diğer modlar için:

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

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

  • şarj cihazı statik olarak 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ığı şekilde çalışır: Android 9'da sağlık

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

Çerçeve, hwservicemanager health@2.0 hizmetini almaya hwservicemanager . Başarısız olursa, health@1.0'a (Android 8.x'te) çağrı yapar. Eski kod yolu korunur, böylece Android 9 sistem görüntüsü Android 8.x satıcı görüntüsü ile uyumludur. Aygıtta yalnızca bir hizmet sürümü (1.0 veya 2.0) mevcut olabileceğinden, çerçeve her iki HAL'den de bilgi almaz.

Diğer modlar için:

Android 9'da kapalı modda şarj etme ve kurtarma

Şekil 4. Android 9'da sağlık, 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ığı şekilde ç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)      ] |
+-------------------------------------+

Health 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 healthd arka plan programıyla aynı işlevselliği sağlar. Aynı zamanda, daha önce bir bağlayıcı hizmeti olarak sağladığına benzer API'ler de sağlar (örn. IBatteryPropertiesRegistrar ).

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

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

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

  • getStorageInfo
  • getDiskStats

Yeni bir yapı, @2.0::HealthInfo , geri aramalar ve getHealthInfo aracılığıyla döndürülür. Bu yapı, sağlık@2.0 HAL aracılığıyla erişilebilen tüm cihaz sağlık bilgilerini içerir, bunlara şunlar dahildir:

  • Şarj bilgileri (AC / USB / kablosuz, akım, voltaj vb.)
  • Pil bilgisi (mevcudiyet, 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 olan IHealth , aşağıdaki ek işlevleri sağlar

  • getHealthConfig : bu getHealthConfig yapılandırmasını almak için
  • getHealthInfo_2_1 : Bir alt sürüm yükseltme getHealthInfo
  • shouldKeepScreenOn : ekranın şarj modunda tutulması gerekip gerekmediğini 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ı. 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.

Yeni bir yapı, @2.1::HealthInfo , geri aramalar ve getHealthInfo_2_1 aracılığıyla döndürülür. Bu yapı, sağlık@2.0 HAL aracılığıyla sağlanan ek cihaz sağlığı bilgilerini içerir.

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

Sağlık hizmetinin uygulanmasına ilişkin bilgi için bkz. Sağlığı Uygulama .