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

בדף הזה מוסבר איך מערכת Android מטפלת במוצרים שיש להם סוללות נשלפות או שאין להם סוללות פנימיות. המכשירים האחרים מחוברים במקום זאת למקור חשמל חיצוני, כמו שקע חשמל AC או יציאת USB במכשיר אחר.

האם יש סוללה?

אפליקציות יכולות להשתמש בקוד הבא כדי לזהות אם יש במכשיר סוללה:

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

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

התנהגות המכשיר ללא סוללה

אם מערכת Android לא מזהה מכשיר סוללה בשביל המוצר, המערכת תשתמש בערכי ברירת המחדל הבאים שקשורים לסוללה. חשוב לזכור שברירת המחדל השתנתה בגרסה 9 של Android. בטבלה הזו מוצגים ההבדלים.

מצב סוללה Android מגרסה 9 ואילך Android מגרסה 8.1 ומטה
הצגה false true
סטטוס לא ידוע בטעינה
הקיבולת שנותרה 0 100%
קופת לא ידוע good, טוב
סטטוס החיבור של מטען AC לא שונו כפוי למציאות

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

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

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

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

Android מגרסה 8.1 ומטה

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

הטמעה

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

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

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

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