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

בדף הזה מוסבר איך מערכת 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 לא שונה הערך שלו הוא 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 power supply class, כל סוגי המטענים (AC, ‏ USB, ‏ אלחוטי) יקבלו כברירת מחדל את הסטטוס offline. אם כל המטענים במצב אופליין אבל לא מזוהה מכשיר עם סוללה, המערכת עדיין תיחשב כמטעינה במובן שהיא פועלת על חשמל חיצוני ולא על סוללה, כפי שמתואר למעלה.

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