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

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

این صفحه نحوه برخورد 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٪ نشان داده می شود. اما به دلیل باتری کم دستگاه خاموش نمی شود و کارهایی که نیاز به شارژ یا باتری خوب دارند برنامه ریزی می شوند.

پیاده سازی

کد پیش‌فرض اندروید 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 تغییر دهید.