ב-Android 10 נוספה אפשרות ללוח זמנים של חיסכון בסוללה שנקראת מבוסס על תרחיש. האפשרות הזו מאפשרת לאפליקציה שנבחרה על ידי יצרן הציוד המקורי לספק אותות למערכת כדי לתזמן את הפעלת חיסכון הסוללה בצורה חכמה יותר. האפשרות הזו דורשת הגדרה, והיא אופציונלית.
תצורת מכשיר
מפרט הספק
כדי להודיע לממשק המשתמש של ההגדרות שהמכשיר מוגדר בצורה נכונה, משתמשים בשכבת-על של ההגדרות כדי להחליף את הערך config_batterySaverScheduleProvider
בשם החבילה של האפליקציה.
לדוגמה, אם רוצים שחבילת האפליקציה com.google.android.apps.turbo
תשלוט בהגדרה 'לפי שגרה', צריך להגדיר את ערך ההגדרה הזה:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
עכשיו בטלפון אמורה להופיע האפשרות בהתאם לשגרה. כדי לוודא, יוצרים את התמונה, מעבירים אותה לטלפון ועוברים אל הגדרות > סוללה > חיסכון בסוללה > תזמון של חיסכון בסוללה. אמורה להופיע האפשרות based on routine (מבוסס על תרחיש).
סף ברירת המחדל להשבתה
השדה החדש config_dynamicPowerSavingsDefaultDisableThreshold
מציין את רמת הסוללה שבה המערכת משביתה את מצב החיסכון בסוללה, אם הוא הופעל על ידי מתזמן based on routine. ברירת המחדל של המערכת היא 80%, אבל אפשר לשנות אותה.
הגדרת אפליקציה
הרשאות
ממשקי ה-API שנדרשים כדי להפעיל את החיסכון בסוללה מהאפליקציה מוגנים על ידי ההרשאה android.permission.POWER_SAVER
. זו הרשאה מיוחדת שניתנת לאפליקציות עם חתימה, לכן צריך להעניק את ההרשאה הזו לאפליקציה שרוצים שתהיה לה אפשרות להפעיל את מצב חיסכון בסוללה בprivapp-whitelist
.
דוגמה להענקת ההרשאה privapp
לאפליקציה:
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
אם לא מעניקים את ההרשאה הזו מראש לגרסת האפליקציה בתמונת המערכת, האפליקציה לא יכולה לקבל את ההרשאה או להפעיל את ממשקי ה-API בצורה תקינה. המערכת לא מספקת משוב מעבר לשגיאות הרגילות שקשורות להרשאות, ולכן צריך לוודא שאפשר לקרוא ל-API ולראות את ההשפעות שלו.
התקנה
כדי שהתכונה based on routine תפעל כראוי, צריך להתקין מראש את האפליקציה בתמונת המערכת עם ההרשאה הנדרשת. נותנים רק לאפליקציה אחת את ההרשאה POWER_SAVER
ומאפשרים לה לשלוט ב-based on routine APIs. ההתנהגות של התכונה כשכמה אפליקציות מנסות להשתמש בהרשאות ובממשקי ה-API לא נתמכת ולא מפורטת.
הפעלת מצב חיסכון בסוללה
ממשקי API
בהנחה שההגדרה בוצעה בהצלחה עד עכשיו, אפליקציית ה-OEM שצוינה בהגדרה אמורה להיות מסוגלת להפעיל בהצלחה את השיטה המשויכת ב-PowerManager כדי להפעיל את מצב חיסכון בסוללה:
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
אם האפשרות based on routine (מבוסס על תרחיש) מופעלת בלוח הזמנים של מצב החיסכון בסוללה, והאפליקציה קוראת לשיטה הזו עם ערך true
עבור powerSaveHint
, מצב החיסכון בסוללה מופעל. מציינים disableThreshold
כדי שאם האפליקציה לא תוכל לתקשר עם המערכת, המערכת עדיין תדע באיזה אחוז סוללה בטוח להשבית את מצב החיסכון בסוללה.
ה-API הזה כפוף לביטולים של המשתמשים ולהשהיה של מצב החיסכון בסוללה, באותו אופן שבו הוא כפוף למצב החיסכון האוטומטי בסוללה שמבוסס על אחוזים. מידע נוסף מופיע במאמרי העזרה של ה-API.
כדי לוודא שהקריאות ל-API בוצעו בהצלחה, צריך לשלוח שאילתה להגדרות הגלובליות כדי לוודא שערך ההגדרה הבסיסית השתנה בהתאם לקריאות ל-API.
לדוגמה, אם המשתמש בחר במצב חיסכון בסוללה באופן שגרתי והאפליקציה קוראת ל-setDynamicPowerSaveHint(true, 10)
, ההגדרות הגלובליות צריכות לכלול את הערכים הבאים:
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1
אם לאחר מכן תפעילו את הפונקציה setDynamicPowerSaveHint(false, 25)
, הערכים יהיו:
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0
אפשר לבדוק את הערכים האלה באמצעות הפקודה adb
:
adb shell settings get global <setting-name>
אימות
אין דרך אוטומטית לאמת את התכונה הזו, כי אין דרך לדעת איזו התנהגות יצרן ציוד מקורי ישתמש בה כדי להחליט מתי להפעיל את מצב חיסכון הסוללה. לכן, יצרני ציוד מקורי (OEM) אחראים לבדוק את השילוב כדי לוודא שההתנהגות עומדת בציפיות. בפרט, צריך לוודא שהמכשיר יכול לבצע את המשימות הבאות:
- המשתמש בוחר באפשרות מבוסס על אחוז בממשק המשתמש של לוח הזמנים של החיסכון בסוללה ומגדיר 15%. מצב חיסכון בסוללה אמור להתחיל לפעול באופן אוטומטי רק כשרמת הטעינה של הסוללה יורדת ל-15%.
- המשתמש בוחר באפשרות בהתאם לתרחיש בממשק המשתמש של לוח הזמנים של מצב החיסכון בסוללה. כשהאפליקציה שולחת קריאה ל-API עם
true
, מצב חיסכון בסוללה מופעל. בנוסף, מצב החיסכון בסוללה מושבת אוטומטית אם המכשיר נטען לרמת הסף שצוינה ומנותק מהחשמל. - המשתמש בוחר באפשרות none (ללא) בממשק המשתמש של לוח הזמנים לחיסכון בסוללה. מצב חיסכון בסוללה לא אמור אף פעם להידלק באופן אוטומטי.
- אם האפליקציה מפעילה את חיסכון הסוללה והמשתמש משבית אותו באופן ידני (באמצעות ההגדרות המהירות, ההגדרות וכו'), הוא צריך להישאר מושבת עד שהמשתמש יפעיל אותו שוב באופן ידני או יחבר את המכשיר לחשמל.