این صفحه نحوه برخورد اندروید با محصولاتی که باتریهای قابل تعویض دارند یا باتری داخلی ندارند را شرح میدهد. دستگاههای دوم به یک منبع تغذیه خارجی مانند پریز برق AC یا پورت USB دستگاه دیگر متصل هستند.
آیا باتری موجود است؟
کد زیر ممکن است توسط برنامهها برای تشخیص وجود باتری در دستگاه استفاده شود:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
رفتار دستگاه بدون باتری
اگر اندروید دستگاه باتریدار را برای محصول شما شناسایی نکند، از مقادیر پیشفرض مربوط به باتری زیر استفاده میشود. توجه داشته باشید که مقادیر پیشفرض در نسخه اندروید ۹ تغییر کردهاند. این جدول تفاوتها را نشان میدهد.
| وضعیت باتری | اندروید ۹ و بالاتر | اندروید ۸.۱ و پایینتر |
|---|---|---|
| حاضر | نادرست | درست |
| وضعیت | ناشناخته | شارژ |
| ظرفیت باقی مانده | 0 | ۱۰۰٪ |
| سلامت | ناشناخته | خوب |
| وضعیت آنلاین شارژر AC | اصلاح نشده | مجبور به حقیقت |
تولیدکنندگان ممکن است تنظیمات پیشفرض را با استفاده از درایور power_supply هسته یا Health HAL تغییر دهند.
اندروید ۹ و بالاتر
اندروید ۹ برخی از کدهای قبلی مربوط به دستگاههای بدون باتری را حذف میکند که به طور پیشفرض وانمود میکردند باتری وجود دارد، ۱۰۰٪ شارژ میشود و در سلامت کامل است و دمای ترمیستور آن نرمال است.
اکثر APIهای چارچوب که با این اطلاعات سروکار دارند، همچنان مانند گذشته با موقعیتهای رایج برخورد میکنند: سیستم در حال شارژ در نظر گرفته میشود (یعنی با باتری کار نمیکند) و باتری کم در نظر گرفته نمیشود. اگر رابط کاربری آیکون باتری را رسم کند، با یک علامت تعجب ظاهر میشود و درصد باتری 0٪ نشان داده میشود. اما دستگاه به دلیل باتری کم خاموش نمیشود و کارهایی که نیاز به شارژ یا باتری خوب دارند، برنامهریزی میشوند.
اندروید ۸.۱ و پایینتر
از آنجا که وضعیت باتری ناشناخته است، APIهای چارچوب اندروید، سیستم را در حال شارژ (یا بدون استفاده از باتری) در نظر میگیرند و آن را دارای باتری کم در نظر نمیگیرند. اگر رابط کاربری آیکون باتری را رندر کند، با یک علامت تعجب ظاهر میشود و درصد باتری 0٪ نشان داده میشود. اما دستگاه به دلیل باتری کم خاموش نمیشود و کارهایی که نیاز به شارژ یا باتری خوب دارند، برنامهریزی میشوند.
پیادهسازی
کد پیشفرض اندروید ۹ ممکن است برای دستگاه شما به درستی کار کند، اما توصیه میشود همانطور که قبلاً توضیح داده شد، یک تغییر در هسته یا HAL ایجاد کنید تا وضعیت برق و باتری محصول شما را به طور دقیق منعکس کند. اگر اندروید ۹ و بالاتر دستگاه شارژر کلاس منبع تغذیه لینوکس را شناسایی نکند، به طور پیشفرض همه انواع شارژر (AC، USB، بیسیم) وضعیت آفلاین خواهند داشت. اگر همه شارژرها آفلاین باشند اما هیچ دستگاه باتری شناسایی نشود، سیستم همچنان در حال شارژ در نظر گرفته میشود به این معنا که با برق خارجی کار میکند، نه باتری، همانطور که قبلاً توضیح داده شد.
اگر محصول شما باتری ندارد و همیشه به منبع تغذیه متصل است، بهتر است یک درایور شارژر کلاس power_supply هسته لینوکس برای منبع تغذیه AC یا USB پیادهسازی کنید که ویژگی online sysfs آن را روی true تنظیم کند. یا میتوانید ویژگی AC charger online را در Health HAL برای دستگاه خود پیکربندی کنید. برای پیکربندی ویژگی AC charger online در Health HAL، به Health AIDL HAL مراجعه کنید.
این Health HAL سفارشی، یک نسخه سفارشی از Health::getHealthInfo() را پیادهسازی میکند که مقدار BatteryProperties.chargerAcOnline = true را تغییر میدهد.
برای شروع، فایل hardware/interfaces/health/aidl/default/Health.cpp را در پیادهسازی Health HAL خود کپی کنید و آن را مطابق با Health AIDL HAL تغییر دهید.