ב-Android 10 נוספה אפשרות לוח זמנים לחיסכון בסוללה שנקראת על סמך תרחיש. האפשרות הזו מאפשרת לאפליקציה שנבחרה על ידי יצרן הציוד המקורי לספק אותות למערכת כדי לתזמן בצורה חכמה יותר את חיסכון הסוללה. האפשרות הזו דורשת הגדרה, והיא אופציונלית להטמעה.
תצורת מכשיר
מפרט הספק
כדי להודיע לממשק המשתמש של ההגדרות שהמכשיר מוגדר בצורה נכונה, משתמשים בשכבת-העל של ההגדרות כדי לשנות את הערך config_batterySaverScheduleProvider
לשם החבילה של האפליקציה.
לדוגמה, אם רוצים לחבילת האפליקציה com.google.android.apps.turbo
לשלוט בהגדרה based on routine, צריך להגדיר את ערך התצורה הזה:
<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
ולאפשר לה לשלוט בממשקי ה-API based on routine. לא תהיה תמיכה בהתנהגות התכונה כשיותר מאפליקציה אחת תנסה להשתמש בהרשאה ובממשקי ה-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) ישתמש בה כדי להחליט מתי להפעיל את מצב חיסכון הסוללה הידני. לכן, יצרני ציוד מקורי אחראים לבדוק את השילוב שלהם כדי לוודא שההתנהגות עומדת בציפיות. חשוב לוודא שהמכשיר יכול לבצע את המשימות הבאות:
- המשתמש בוחר באפשרות based on percentage (בהתאם לאחוז) בממשק המשתמש של לוח הזמנים של מצב החיסכון בסוללה, ובוחר באפשרות 15%. מצב חיסכון בסוללה אמור להופעל באופן אוטומטי רק כשרמת הטעינה של הסוללה מגיעה ל-15%.
- המשתמש בוחר באפשרות לפי תרחיש בממשק המשתמש של לוח הזמנים של מצב החיסכון בסוללה. כשהאפליקציה קוראת ל-API עם
true
, מצב חיסכון בסוללה מופעל. בנוסף, מצב החיסכון בסוללה מושבת באופן אוטומטי אם המכשיר טעון לרמת הסף שצוינה והתנתק מהחשמל. - המשתמש בוחר באפשרות none בממשק המשתמש של לוח הזמנים של מצב החיסכון בסוללה. מצב החיסכון בסוללה אף פעם לא אמור להופעל באופן אוטומטי.
- אם האפליקציה מפעילה את חיסכון הסוללה והמשתמש מבטל את חיסכון הסוללה באופן ידני (באמצעות ההגדרות המהירות, ההגדרות וכו'), הוא אמור להישאר מושבת עד שהמשתמש יפעיל אותו שוב באופן ידני או יחבר את המכשיר.