التوافق مع الأجهزة التي لا تحتوي على بطارية

توضّح هذه الصفحة كيفية تعامل Android مع المنتجات التي تحتوي على بطاريات قابلة للإزالة أو لا تحتوي على بطاريات داخلية. ويتم توصيل هذه الأجهزة بدلاً من ذلك بأحد مصادر الطاقة الخارجية، مثل مقبس طاقة التيار المتّصل أو منفذ USB على جهاز آخر.

هل هناك بطارية؟

يمكن أن تستخدم التطبيقات الرمز البرمجي التالي لرصد ما إذا كان الجهاز يحتوي على بطارية:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

سلوك الجهاز غير المزوّد ببطارية

إذا لم يرصد نظام Android جهازًا مزوّدًا ببطارية لمنتجك، يتم استخدام القيمة التلقائية التالية المتعلقة بالبطارية. يُرجى العِلم أنّ الإعدادات التلقائية قد تغيّرت في الإصدار Android 9. يوضّح هذا الجدول الاختلافات.

حالة البطارية الإصدار 9 من Android والإصدارات الأحدث الإصدار 8.1 من نظام التشغيل Android والإصدارات الأقدم
مشاركة العرض خطأ true
الحالة مرحلة غير محددة جارٍ الشحن
السعة المتبقية 0 100%
البطاقة مرحلة غير محددة جيد
حالة شاحن التيار المتّصل بالإنترنت لم يتم تعديلها تم ضبطها على "صحيح"

يمكن للمصنعين تغيير الإعدادات التلقائية باستخدام برنامج تشغيل power_supply الخاص بالنواة أو Health HAL.

الإصدار 9 من Android والإصدارات الأحدث

يزيل نظام التشغيل Android 9 بعض الرموز البرمجية السابقة للأجهزة التي لا تحتوي على بطارية والتي كانت تتظاهر تلقائيًا بأنّها تحتوي على بطارية وأنّها قيد الشحن بنسبة %100 وأنّها في حالة جيدة مع قراءة درجة حرارة عادية على ملفه المتعلّق بالمستشعر الحراري.

تستمر معظم واجهات برمجة التطبيقات لإطار العمل التي تتعامل مع هذه المعلومات في التعامل مع المواقف المشترَكة بالطريقة نفسها التي كانت متّبعة في السابق: يُعتبر النظام في حالة شحن (أي أنّه لا يعمل باستخدام طاقة البطارية)، ولن يُعتبر أنّه يحتوي على بطارية منخفضة. إذا كانت واجهة المستخدم ترسم رمز البطارية، سيظهر مع علامة تعجب، وسيتم عرض النسبة المئوية للبطارية على أنّها 0%. ولن يتم إيقاف الجهاز بسبب انخفاض طاقة البطارية، وسيتم جدولة المهام التي تتطلّب شحن البطارية أو أن تكون بحالة جيدة.

الإصدار 8.1 من نظام التشغيل Android والإصدارات الأقدم

ولأنّ حالة البطارية غير معروفة، ستعتبر واجهات برمجة التطبيقات لإطار عمل Android أنّه يتم شحن النظام (أو أنّه لا يعمل باستخدام طاقة البطارية)، ولن يتم اعتباره أنّه يحتوي على بطارية منخفضة. إذا عرضت واجهة المستخدم رمز البطارية، سيظهر مع علامة تعجب، وسيتم عرض النسبة المئوية للبطارية على النحو التالي: 0%. ولن يتم إغلاق الجهاز بسبب انخفاض طاقة البطارية، وسيتم جدولة المهام التي تتطلب شحن البطارية أو أن تكون طاقة البطارية جيدة.

التنفيذ

قد يعمل الرمز التلقائي لنظام التشغيل Android 9 بشكلٍ سليم على جهازك، ولكن يُنصح بإجراء تغيير على إما kernel أو HAL لعكس حالة الطاقة والبطارية لمنتجك بدقة، كما هو موضّح سابقًا. إذا لم يرصد نظام التشغيل Android 9 والإصدارات الأحدث جهاز شاحن مزودًا بمصدر طاقة لنظام التشغيل Linux، سيتم تلقائيًا ضبط حالة جميع أنواع الشواحن (الشحن اللاسلكي وUSB وتيار متردد) على غير متصل بالإنترنت. إذا كانت جميع الشواحن غير متصلة بالإنترنت ولكن لم يتم رصد أي جهاز يعمل بالبطارية، سيظل النظام قيد الشحن بمعنى أنّه يعمل باستخدام مصدر طاقة خارجي وليس طاقة البطارية، كما هو موضّح سابقًا.

إذا كان منتجك لا يحتوي على بطارية وكان متصلاً دائمًا بمصدر طاقة، من الأفضل تنفيذ برنامج تشغيل شاحن لفئة power_supply في نواة Linux لمصدر الطاقة من التيار المتّصل أو USB الذي يضبط سمة متصل sysfs على true. أو يمكنك ضبط موقع شاحن التيار المتّصل على الإنترنت في Health HAL لجهازك. لضبط سمة الشاحن المتوفّر على الإنترنت في Health HAL، يُرجى الرجوع إلى Health AIDL HAL.

ينفِّذ Health HAL المخصّص هذا إصدارًا مخصّصًا من Health::getHealthInfo() الذي يعدّل قيمة BatteryProperties.chargerAcOnline = true.

للبدء، انسخ الملف hardware/interfaces/health/aidl/default/Health.cpp إلى تطبيق Health HAL الخاص بك وعدِّله وفقًا لملف Health AIDL HAL.