اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
التوافق مع الأجهزة التي لا تحتوي على بطارية
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
توضّح هذه الصفحة كيفية تعامل 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.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Support batteryless devices\n\nThis page describes how Android handles products that have either removable\nbatteries or no internal batteries. The latter devices are instead connected to\nan external power source, such as an AC power outlet or USB port on another\ndevice.\n\nIs a battery present?\n---------------------\n\nThe following code may be used by applications to detect whether the device has\na battery present: \n\n ```\n final Intent batteryInfo = registerReceiver(null, new\n IntentFilter(Intent.ACTION_BATTERY_CHANGED));\n\n return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);\n ```\n\nBatteryless device behavior\n---------------------------\n\nIf Android does not detect a battery device for your product, then the following\nbattery-related default values are used. Note the defaults have changed in the\nAndroid 9 release. This table shows the differences.\n\n| Battery state | Android 9 and higher | Android 8.1 and lower |\n|----------------------------|----------------------|-----------------------|\n| *Present* | false | true |\n| *Status* | unknown | charging |\n| *Remaining capacity* | 0 | 100% |\n| *Health* | unknown | good |\n| *AC charger online status* | not modified | forced to true |\n\nManufacturers may alter the default settings using a kernel\n[power_supply](https://www.kernel.org/doc/Documentation/power/power_supply_class.txt)\ndriver or [Health HAL](/docs/core/perf/health).\n\n### Android 9 and higher\n\nAndroid 9 removes some previous code for batteryless\ndevices that by default pretended a battery was present, was being charged at\n100%, and was in good health with a normal temperature reading on its\nthermistor.\n\nMost framework APIs that deal with this information continue to handle common\nsituations the same as previously: the system is considered to be\n*charging* (that is, not running on battery power), and won't be considered\nto have a low battery. If the user interface draws the battery icon, it will\nappear with an exclamation point, and battery percentage is shown as 0%.\nBut the device won't shut down due to low battery, and jobs that require\ncharging or good battery are scheduled.\n\n### Android 8.1 and lower\n\nBecause the battery status is unknown, the Android framework APIs will consider\nthe system to be *charging* (or, not running on battery power) and won't be\nconsidered to have a low battery. If the user interface renders the battery\nicon, it will appear with an exclamation point, and battery percentage is\nshown as 0%. But the device won't shut down due to low battery, and jobs that\nrequire charging or good battery are scheduled.\n\nImplementation\n--------------\n\nThe Android 9 default code may work properly for your\ndevice, but it's recommended to make either a kernel or a HAL change to\naccurately reflect the power and battery state for your product, as described\npreviously. If Android 9 and higher doesn't detect a [Linux power supply\nclass](https://www.kernel.org/doc/Documentation/power/power_supply_class.txt)\ncharger device, then by default all charger types (AC, USB, Wireless) will have\nstatus *offline*. If all chargers are offline but there is no battery device\ndetected, the system will still be considered to be charging in the sense that\nit is running on external, not battery power, as described previously.\n\nIf your product doesn't have a battery and is always connected to a power\nsource, it's best to implement a Linux kernel power_supply class *charger*\ndriver for the AC or USB power source that sets its *online* `sysfs` attribute\nto `true`. Or you can configure the AC charger online property in a Health HAL\nfor your device. To configure the AC charger online property in a Health HAL,\nrefer to [Health AIDL HAL](https://android.googlesource.com/platform/hardware/interfaces/+/main/health/aidl/README.md).\n\nThis custom Health HAL implements a custom version of `Health::getHealthInfo()`\nthat modifies the value of `BatteryProperties.chargerAcOnline = true`.\n\nTo get started, copy file\n[`hardware/interfaces/health/aidl/default/Health.cpp`](https://android.googlesource.com/platform/hardware/interfaces/+/main/health/aidl/default/Health.cpp)\nto your own Health HAL implementation and modify it according to the\n[Health AIDL HAL](https://android.googlesource.com/platform/hardware/interfaces/+/main/health/aidl/README.md)."]]