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

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

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

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

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

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

Android מגרסה 8.1 ומטה

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

הטמעה

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

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

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

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