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

בדף הזה מוסבר איך מערכת 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, טוב
סטטוס החיבור של מטען AC לא שונה forced to true

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

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

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

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

‫Android מגרסה 8.1 ומטה

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

הטמעה

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

אם למוצר שלכם אין סוללה והוא תמיד מחובר למקור מתח, מומלץ להטמיע מנהל התקן של מטען מסוג power_supply של ליבת Linux עבור מקור המתח AC או USB, שמגדיר את מאפיין online 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.