תמיכה במכשירים ללא סוללה

בדף הזה מוסבר איך מערכת Android מטפלת במוצרים שיש להם סוללות נשלפות או שאין להם סוללות פנימיות. המכשירים האחרים מחוברים במקום זאת למקור חשמל חיצוני, כמו שקע חשמל AC או יציאת 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 ומטה
הצגה false true
סטטוס לא ידוע בטעינה
הקיבולת שנותרה 0 100%
קופת לא ידוע good, טוב
סטטוס החיבור לאינטרנט של מטען המיזוג לא שונה כפוי למציאות

היצרן יכול לשנות את הגדרות ברירת המחדל באמצעות מנהל התקן ליבה power_supply או Health HAL.

Android מגרסה 9 ואילך

מערכת Android 9 מסירה קוד קודם למכשיר ללא סוללה, שכברירת מחדל התבססה על סוללה נטענת, טעונה ב-100% ושהטמפרטורה הייתה תקינה, כשהטמפרטורה הייתה תקינה בתרמוסטט.

רוב ממשקי ה-API של framework שעוסקים במידע הזה ממשיכים לטפל במצבים נפוצים כמו קודם: המערכת נחשבת לטעינה (כלומר לא פועלת על סוללה), והיא לא תיחשב כסוללה חלשה. אם סמל הסוללה מוצג בממשק המשתמש, הוא יופיע עם סימן קריאה, ואחוז הסוללה יוצג כ-0%. עם זאת, המכשיר לא יכבה כי הסוללה חלשה, ומשימות שדורשות טעינה או סוללה טובה מתוזמנות.

Android מגרסה 8.1 ומטה

מכיוון שסטטוס הסוללה לא ידוע, ממשקי ה-API של Android framework יתייחסו למערכת כנטען (או לא פועלת על בסיס סוללה), והם לא נחשבים לסוללה חלשה. אם ממשק המשתמש מבצע עיבוד של סמל הסוללה, הוא יופיע עם סימן קריאה, ואחוז הסוללה יוצג כ-0%. אבל המכשיר לא יכבה כי הסוללה חלשה, ומשימות שמחייבות טעינה או סוללה טובה מתוזמנות.

הטמעה

קוד ברירת המחדל של Android 9 עשוי לפעול כמו שצריך במכשיר, אבל מומלץ לבצע ליבה (kernel) או שינוי HAL כדי לשקף במדויק את רמת הטעינה ומצב הסוללה של המוצר, כפי שתואר קודם. אם מערכת Android מגרסה 9 ואילך לא מזהה מכשיר מטען בסיווג של ספק כוח של Linux, כברירת מחדל כל סוגי המטענים (AC, USB, Wireless) יהיו בסטטוס אופליין. אם כל המטענים במצב אופליין אבל לא זוהה אף מכשיר עם סוללה, המערכת עדיין תיחשב כטעינה כאילו היא פועלת על ידי שימוש חיצוני, ולא על ידי סוללה, כפי שתואר קודם.

אם אין למוצר סוללה והוא תמיד מחובר למקור חשמל, מומלץ להטמיע מנהל התקן מטען מטען של ליבה (kernel) של Linux עבור מקור החשמל AC או USB, שמגדיר את המאפיין sysfs אונליין ל-true. לחלופין, תוכלו להגדיר את המאפיין של מטען ה-AC אונליין ב-Health HAL למכשיר. כדי להגדיר את המאפיין של מטען AC אונליין ב-Health HAL, עיינו במאמר Health AIDL HAL.

HAL המותאם אישית של Health HAL מיישם גרסה מותאמת אישית של Health::getHealthInfo() שמשנה את הערך של BatteryProperties.chargerAcOnline = true.

כדי להתחיל, מעתיקים את הקובץ hardware/interfaces/health/aidl/default/Health.cpp להטמעה שלכם של Health HAL ומשנים אותו בהתאם ל-Health AIDL HAL.