از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
پشتیبانی از دستگاه های بدون باتری
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
این صفحه نحوه برخورد Android با محصولاتی را که دارای باتری قابل جابجایی یا بدون باتری داخلی هستند، توضیح میدهد. دستگاه های دوم در عوض به یک منبع برق خارجی مانند پریز برق AC یا پورت USB در دستگاه دیگری متصل می شوند.
آیا باتری موجود است؟
کد زیر ممکن است توسط برنامهها برای تشخیص وجود باتری در دستگاه استفاده شود:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
رفتار دستگاه بدون باتری
اگر Android دستگاه باتری را برای محصول شما شناسایی نکرد، از مقادیر پیشفرض مرتبط با باتری زیر استفاده میشود. توجه داشته باشید که پیش فرض ها در نسخه اندروید 9 تغییر کرده اند. این جدول تفاوت ها را نشان می دهد.
وضعیت باتری | اندروید 9 و بالاتر | اندروید 8.1 و پایین تر |
---|
حاضر شود | نادرست | درست است |
وضعیت | ناشناخته | شارژ کردن |
ظرفیت باقی مانده | 0 | 100% |
سلامتی | ناشناخته | خوب |
وضعیت آنلاین شارژر AC | اصلاح نشده است | مجبور به حقیقت |
سازندگان ممکن است تنظیمات پیش فرض را با استفاده از درایور منبع تغذیه هسته یا Health HAL تغییر دهند.
اندروید 9 و بالاتر
اندروید 9 برخی از کدهای قبلی را برای دستگاههای بدون باتری حذف میکند که بهطور پیشفرض وانمود میکردند باتری وجود دارد، 100 درصد شارژ میشود و با خواندن دمای معمولی روی ترمیستور خود، از سلامت خوبی برخوردار بودند.
اکثر APIهای فریمورک که با این اطلاعات سروکار دارند، مانند گذشته موقعیتهای رایج را مدیریت میکنند: سیستم در حال شارژ در نظر گرفته میشود (یعنی با باتری کار نمیکند)، و باتری کم در نظر گرفته نمیشود. اگر رابط کاربری نماد باتری را بکشد، با علامت تعجب ظاهر می شود و درصد باتری به عنوان 0٪ نشان داده می شود. اما به دلیل باتری کم دستگاه خاموش نمی شود و کارهایی که نیاز به شارژ یا باتری خوب دارند برنامه ریزی شده اند.
اندروید 8.1 و پایین تر
از آنجایی که وضعیت باتری ناشناخته است، APIهای فریمورک Android سیستم را در حال شارژ (یا با شارژ باتری کار نمیکند) در نظر میگیرند و باتری کم در نظر گرفته نمیشوند. اگر رابط کاربری نماد باتری را نمایش دهد، با علامت تعجب ظاهر می شود و درصد باتری به صورت 0% نشان داده می شود. اما به دلیل باتری کم دستگاه خاموش نمی شود و کارهایی که نیاز به شارژ یا باتری خوب دارند برنامه ریزی شده اند.
پیاده سازی
کد پیشفرض اندروید 9 ممکن است به درستی برای دستگاه شما کار کند، اما توصیه میشود که یک هسته یا یک تغییر HAL ایجاد کنید تا همانطور که قبلاً توضیح داده شد، وضعیت انرژی و باتری محصول شما به طور دقیق منعکس شود. اگر Android 9 و بالاتر دستگاه شارژر کلاس منبع تغذیه لینوکس را شناسایی نکند، به طور پیشفرض همه انواع شارژر (AC، USB، Wireless) وضعیت آفلاین خواهند داشت. اگر همه شارژرها آفلاین باشند اما دستگاه باتری شناسایی نشده باشد، سیستم همچنان در حال شارژ شدن در نظر گرفته میشود، به این معنا که همانطور که قبلاً توضیح داده شد، با باتری خارجی کار میکند، نه باتری.
اگر محصول شما باتری ندارد و همیشه به منبع تغذیه متصل است، بهتر است یک درایور شارژر کلاس power_supply هسته لینوکس را برای منبع تغذیه AC یا USB اجرا کنید که ویژگی sysfs
آنلاین خود را روی true
تنظیم می کند. یا می توانید ویژگی آنلاین شارژر AC را در یک Health HAL برای دستگاه خود پیکربندی کنید. برای پیکربندی ویژگی آنلاین شارژر AC در Health HAL، به Health AIDL HAL مراجعه کنید.
این Health HAL سفارشی یک نسخه سفارشی از Health::getHealthInfo()
را پیادهسازی میکند که مقدار BatteryProperties.chargerAcOnline = true
را تغییر میدهد.
برای شروع، فایل hardware/interfaces/health/aidl/default/Health.cpp
در اجرای Health HAL خودتان کپی کنید و آن را مطابق Health AIDL HAL تغییر دهید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)."]]