Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

Android Health

يشتمل Android 9 على android.hardware.health HAL 2.0 ، وهو ترقية إصدار رئيسي من health@1.0 HAL. يتمتع HAL الجديد بالمزايا التالية:

  • فصل أوضح بين إطار العمل ورمز البائع.
  • healthd غير الضروري.
  • درجات أكبر من الحرية لتخصيص البائعين في تقارير المعلومات الصحية.
  • المزيد من المعلومات الصحية للجهاز بخلاف البطارية فقط.

يتضمن Android 11 android.hardware.health HAL 2.1 ، ترقية إصدار ثانوي من health@2.0 HAL. يتمتع HAL الجديد بالمزايا التالية:

  • أسهل في التنفيذ
  • توافق أفضل مع 2.0 HAL APIs الموجودة
  • فصل أفضل للثريبل في كود الشحن في وضع إيقاف التشغيل
  • دعم أفضل للإطار للإشارة إلى صحة بطارية الجهاز

المتطلبات

يجب أن توفر الأجهزة التي يتم تشغيلها بنظام Android 9 الإصدار 2.0 HAL (ويجب ألا توفر 1.0 HAL). يجب أن تزيل الأجهزة التي لا تعمل بنظام Android 9 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix Version 3 (تم إصدارها في Android 9) تطبيقات 1.0 HAL الحالية وتوفر 2.0 HAL.

يجب أن توفر الأجهزة التي يتم تشغيلها مع Android 11 الإصدار 2.1 HAL (ويجب ألا توفر 1.0 أو 2.0 HAL). يجب أن تزيل الأجهزة التي لا تعمل مع Android 11 ولكنها تخطط لتحديث صورة البائع إلى Target Framework Compatibility Matrix الإصدار 5 (تم إصدارها في Android 11) تطبيقات 2.0 HAL الحالية وتوفر 2.1 HAL. يوصى أيضًا بالأجهزة التي لا تعمل بنظام Android 11 ولا تخطط لتحديث صورة البائع لتوفير 2.1 HAL.

يتضمن AOSP مكتبات مساعدة متعددة مصممة لمساعدتك في تنفيذ 2.1 HAL والانتقال من 1.0 HAL القديم.

المصطلح

  • health@1.0 : اختصار android.hardware.health@1.0 . يشير إلى الإصدار 1.0 من HIDL HAL الصحي الذي تم إصداره في Android 8.0.
  • health@2.0 : اختصار android.hardware.health@2.0 . يشير إلى الإصدار 2.0 من HIDL HAL الصحي في Android 9.
  • health@2.1 : اختصار android.hardware.health@2.1 . يشير إلى الإصدار 2.1 HIDL HAL الصحي الذي تم إصداره في Android 11.
  • الشاحن : قابل للتنفيذ يعمل في وضع إيقاف الشحن يعرض الرسوم المتحركة لشحن الهاتف.
  • الاسترداد : الملف القابل للتنفيذ يعمل في وضع الاسترداد الذي يجب أن يسترد معلومات البطارية.
  • healthd : برنامج خفي قديم يعمل في Android يسترد المعلومات المتعلقة بالصحة ويوفرها إلى إطار العمل.
  • storaged : برنامج خفي يعمل في Android يسترد معلومات التخزين ويوفرها للإطار.

الصحة في Android 8.x

في Android 8.x ، يعمل المكون الصحي كما هو مفصل في الرسم التخطيطي التالي:

الصحة في Android 8.x

الشكل 1 . الصحة في Android 8.x

في هذا الرسم البياني:

  • يتم استخدام مكالمة واحدة (1) Binder ومكالمة hwbinder واحدة (1) بواسطة إطار العمل للتواصل مع الأجهزة.
  • healthd يربط بشكل ثابت إلى libhealthd_android ، libbatterymonitor ، و libbatteryservice .
  • health@1.0-impl بشكل ثابت روابط لـ libhealthd. BOARD .

يمكن لكل لوحة تخصيص libhealthd. BOARD مختلفة libhealthd. BOARD يتم تحديده في وقت الإنشاء ما هو رابط الشاحن و health@1.0-impl ورابط الاسترداد.

لأوضاع أخرى:

وضع الشحن والاسترداد خارج الوضع في Android 8.x

الشكل 2. الصحة في Android 8.x ووضع الشحن خارج الوضع والاسترداد

  • شاحن روابط libhealthd. BOARD إلى libhealthd. BOARD و libhealthd_charger و libbatterymonitor .
  • الانتعاش روابط libhealthd. BOARD إلى libhealthd. BOARD و libbatterymonitor .

الصحة في Android 9

في Android 9 ، يعمل المكون الصحي كما هو مفصل في الرسم البياني التالي: الصحة في Android 9

الشكل 3 . الصحة في Android 9

يحاول إطار العمل استرداد خدمة hwservicemanager من hwservicemanager . إذا فشل ، يتم الاتصال بـ health@1.0 (في Android 8.x). يتم الاحتفاظ بمسار الرمز القديم حتى تتوافق صورة نظام Android 9 مع صورة بائع Android 8.x. لا يسترد إطار العمل المعلومات من كلتا HALs لأنه يمكن وجود إصدار خدمة واحد فقط (1.0 أو 2.0) على الجهاز.

لأوضاع أخرى:

الشحن خارج الوضع والاسترداد في Android 9

الشكل 4. الصحة في Android 9 ، وضع الشحن خارج الوضع والاسترداد

الصحة في Android 11

في Android 11 ، يعمل المكون الصحي كما هو مفصل في الرسم البياني التالي:

[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 ، يعود النظام إلى مسار الكود القديم كما هو موضح في الأقسام السابقة

لأوضاع أخرى:

[       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 2.0

يوفر health@2.0 HAL الوظيفة نفسها لإطار العمل مثل البرنامج الخفي healthd القديم. كما أنه يوفر واجهات برمجة التطبيقات التي تشبه ما قدمته healthd سابقًا كخدمة ربط (أي IBatteryPropertiesRegistrar ).

توفر الواجهة الرئيسية ، IHealth ، الوظائف التالية:

  • registerCallback ليحل محل IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback ، لاستبدال IBatteryPropertiesRegistrar.unregisterListener
  • update ، لاستبدال IBatteryPropertiesRegistrar.scheduleUpdate
  • يتم استبدال IBatteryPropertiesRegistrar.getProperties بما يلي:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

وبالإضافة إلى ذلك، IHealth يوفر واجهات برمجة التطبيقات الجديدة التالية ل storaged لاسترداد تخزين المعلومات ببائعي ذات الصلة:

  • getStorageInfo
  • getDiskStats

يتم إرجاع بنية جديدة ، @2.0::HealthInfo ، عبر عمليات الاسترجاعات و getHealthInfo . تحتوي هذه البنية على جميع معلومات صحة الجهاز المتوفرة عبر health@2.0 HAL ، بما في ذلك:

  • معلومات الشحن (تيار متردد / USB / لاسلكي ، تيار ، جهد كهربائي ، إلخ.)
  • معلومات البطارية (الوجود ، مستوى البطارية ، التيار ، الجهد ، الشحن ، التكنولوجيا ، إلخ.)
  • معلومات التخزين (معلومات جهاز التخزين ، إحصائيات القرص)

واجهة HAL 2.1

يدعم health@2.1 HAL الشحن في وضع إيقاف التشغيل ويوفر مزيدًا من المعلومات حول البطارية.

توفر الواجهة الرئيسية ، IHealth ، الوظائف الإضافية التالية

  • getHealthConfig : لاسترداد تكوين HAL هذا
  • getHealthInfo_2_1 : ترقية إصدار ثانوي لـ getHealthInfo
  • shouldKeepScreenOn : لتحديد ما إذا كان يجب إبقاء الشاشة في وضع الشاحن

بالإضافة إلى ذلك ، يلزم تنفيذ @2.1::IHealth لدعم @2.1::IHealthInfoCallback registerCallback و unregisterCallback الموروثة. تقوم واجهة رد الاتصال الجديدة بإرجاع المعلومات الصحية إلى العميل باستخدام وظيفة healthInfoChanged_2_1 الخاصة به بدلاً من وظيفة healthInfoChanged الموروثة.

يتم إرجاع بنية جديدة ، @2.1::HealthInfo ، عبر عمليات الاسترجاعات و getHealthInfo_2_1 . تحتوي هذه البنية على معلومات إضافية عن صحة الجهاز متاحة عبر health@2.0 HAL ، بما في ذلك:

  • مستوى سعة البطارية
  • وقت شحن البطارية حتى الاكتمال الآن (بالثواني)
  • سعة تصميم الشحن الكامل للبطارية (في μAh)

للحصول على معلومات حول تنفيذ الخدمة الصحية ، راجع تنفيذ الصحة .