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

این صفحه نحوه برخورد 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های فریمورک اندروید سیستم را در حال شارژ (یا با شارژ باتری کار نمی‌کند) در نظر می‌گیرند و باتری کم در نظر گرفته نمی‌شوند. اگر رابط کاربری نماد باتری را نمایش دهد، با علامت تعجب ظاهر می شود و درصد باتری به عنوان 0٪ نشان داده می شود. اما به دلیل باتری کم دستگاه خاموش نمی شود و کارهایی که نیاز به شارژ یا باتری خوب دارند برنامه ریزی می شوند.

پیاده سازی

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

اگر محصول شما باتری ندارد و همیشه به منبع تغذیه متصل است، بهتر است یک درایور شارژر کلاس power_supply هسته لینوکس را برای منبع تغذیه AC یا USB که ویژگی sysfs آنلاین آن را روی true تنظیم می‌کند، پیاده‌سازی کنید. یا می توانید ویژگی آنلاین شارژر AC را در یک Health HAL برای دستگاه خود پیکربندی کنید. برای انجام این کار یک Health HAL همانطور که در Implementing Health 2.0 توضیح داده شده است، پیاده سازی کنید.

این Health HAL سفارشی یک نسخه سفارشی از Health::getHealthInfo() را پیاده‌سازی می‌کند که مقدار BatteryProperties.chargerAcOnline = true را تغییر می‌دهد.

برای شروع، فایل hardware/interfaces/health/2.0/default/Health.cpp در اجرای Health HAL خودتان کپی کنید و آن را مطابق Health 2.0 README تغییر دهید.