پشتیبانی از دستگاه‌های بدون باتری

این صفحه توضیح می‌دهد که Android چگونه با محصولاتی که باتری قابل‌جداشدن دارند یا باتری داخلی ندارند برخورد می‌کند. دستگاه‌های اخیر به‌جای آن به منبع برق خارجی، مانند پریز برق متناوب یا درگاه USB در دستگاه دیگر، متصل می‌شوند.

باتری دارد؟

برنامه‌ها می‌توانند از کد زیر برای تشخیص اینکه دستگاه باتری دارد یا نه استفاده کنند:

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

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

عملکرد دستگاه بدون باتری

اگر Android دستگاه باتری‌داری برای محصولتان شناسایی نکند، از مقادیر پیش‌فرض زیر که مربوط به باتری است استفاده می‌شود. توجه داشته باشید که پیش‌فرض‌ها در نسخه Android 9 تغییر کرده است. این جدول تفاوت‌ها را نشان می‌دهد.

وضعیت باتری ‫Android 9 و بالاتر ‫Android 8.1 و نسخه‌های پایین‌تر
ارائه نادرست درست
وضعیت نامشخص شارژ کردن
ظرفیت باقی‌مانده 0 ‎٪۱۰۰
سلامت نامشخص خوب
وضعیت آنلاین شارژر AC تغییر نکرده است روی درست تنظیم شد

تولیدکنندگان ممکن است تنظیمات پیش‌فرض را بااستفاده از درایور power_supply هسته یا Health HAL تغییر دهند.

‫Android 9 و بالاتر

‫Android 9 برخی‌از کدهای قبلی را برای دستگاه‌های بدون باتری برمی‌دارد. این دستگاه‌ها به‌طور پیش‌فرض وانمود می‌کردند که باتری دارند، باتری درحال شارژ شدن با ۱۰۰٪ ظرفیت است، و باتری سالم است و دمای آن در ترمیستور در حد عادی است.

اکثر میاناهای برنامه‌سازی کاربردی چارچوب که با این اطلاعات سروکار دارند، همچنان موقعیت‌های رایج را مانند قبل مدیریت می‌کنند: سیستم درحال شارژ درنظر گرفته می‌شود (یعنی با باتری کار نمی‌کند) و باتری آن کم درنظر گرفته نخواهد شد. اگر واسط کاربر نماد باتری را رسم کند، این نماد با علامت تعجب ظاهر می‌شود و درصد باتری به‌عنوان ۰٪ نشان داده می‌شود. اما دستگاه به‌دلیل شارژ کم باتری خاموش نمی‌شود و کارهایی که نیاز به شارژ یا باتری خوب دارند زمان‌بندی می‌شوند.

‫Android 8.1 و نسخه‌های پایین‌تر

چون وضعیت باتری نامشخص است، «میاناهای برنامه‌سازی کاربردی چارچوب Android» سیستم را در وضعیت شارژ (یا، درحال کار با برق باتری) درنظر می‌گیرند و سیستم به‌عنوان دارای باتری کم درنظر گرفته نمی‌شود. اگر واسط کاربر نماد باتری را ارائه کند، این نماد با علامت تعجب نمایش داده می‌شود و درصد باتری به‌صورت ۰٪ نشان داده می‌شود. اما دستگاه به‌دلیل شارژ کم باتری خاموش نمی‌شود و کارهایی که به شارژ یا باتری خوب نیاز دارند زمان‌بندی می‌شوند.

پیاده‌سازی

کد پیش‌فرض Android 9 ممکن است برای دستگاهتان به‌درستی کار کند، اما توصیه می‌شود برای بازتاب دقیق وضعیت باتری و مصرف برق محصولتان، همان‌طور که قبلاً توضیح داده شد، تغییراتی در هسته یا HAL ایجاد کنید. اگر Android نسخه ۹ و بالاتر دستگاه شارژر کلاس منبع تغذیه Linux را شناسایی نکند، به‌طور پیش‌فرض همه انواع شارژر (AC،‏ USB، بی‌سیم) وضعیت آفلاین خواهند داشت. اگر همه شارژرها آفلاین باشند اما دستگاه باتری تشخیص داده نشود، سیستم همچنان درحال شارژ درنظر گرفته می‌شود، به این معنا که همان‌طور که قبلاً توضیح داده شد، با برق خارجی کار می‌کند نه با باتری.

اگر محصولتان باتری ندارد و همیشه به منبع برق متصل است، بهتر است کلاس power_supply هسته Linux را برای درایور شارژر منبع برق 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 اصلاح کنید.