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:
Ş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
velibbatteryservice
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:
Şekil 2. Android 8.x'te sağlık, mod dışı şarj ve kurtarma modu
- şarj cihazı
libhealthd. BOARD
,libhealthd_charger
velibbatterymonitor
. - kurtarma statik olarak
libhealthd. BOARD
velibbatterymonitor
.
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:
Ş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:
Ş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ı .