חיסכון בסוללה לפי תרחישים

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

תצורת מכשיר

בקטע הזה מוסבר איך להגדיר את המכשיר לאפשרות על סמך שגרה.

מפרט הספק

כדי להודיע לממשק המשתמש של ההגדרות שהמכשיר מוגדר בצורה נכונה, משתמשים בשכבת-על של ההגדרות כדי לשנות את הערך config_batterySaverScheduleProvider לשם חבילת ה-APK של האפליקציה. לדוגמה, אם רוצים שחבילת ה-APK של האפליקציה 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%, אבל אפשר לשנות אותה.

הגדרת אפליקציה

בקטע הזה מוסבר איך להגדיר את האפליקציה כך שתשתמש באפשרות Based on routine (על סמך שגרה).

הרשאות

ממשקי ה-API שנדרשים כדי שאפליקציה תפעיל את התכונה 'חיסכון בסוללה' מוגנים על ידי ההרשאה android.permission.POWER_SAVER. זו חתימה או הרשאה מיוחדת. כלומר, האפליקציה צריכה להיות בספרייה priv-app בקובץ אימג' של המערכת, ואתם צריכים להעניק את ההרשאה הזו באופן מפורש.

לאפליקציות עם הרשאות מיוחדות, צריך להעניק הרשאות בקובץ XML של הגדרות המערכת בספרייה /etc/permissions/ באותה מחיצה שבה נמצאת האפליקציה. לדוגמה, כדי להעניק את ההרשאה android.permission.POWER_SAVER לאפליקציה עם שם החבילה com.google.android.apps.turbo:

<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
    <privapp-permissions package="com.google.android.apps.turbo">
        <permission name="android.permission.POWER_SAVER"/>
    </privapp-permissions>
</permissions>

אם לא מעניקים מראש את ההרשאה הזו לאפליקציה בקובץ האימג' של המערכת, האפליקציה לא יכולה לקבל את ההרשאה או להפעיל את ממשקי ה-API בהצלחה. המערכת לא מספקת משוב מעבר לשגיאות הרשאה רגילות, ולכן חשוב לוודא שהאפליקציה יכולה לקרוא ל-API ולראות את ההשפעות שלה.

התקנה

כדי שהתכונה על סמך שגרה תפעל כראוי, צריך להתקין מראש את האפליקציה ב קובץ אימג' של המערכת עם ההרשאה הנדרשת. נותנים רק לאפליקציה אחת את ההרשאה android.permission.POWER_SAVER ומאפשרים לה לשלוט בממשקי ה-API של Based on routine. התנהגות התכונה לא נתמכת ולא מוגדרת אם יותר מאפליקציה אחת מנסה להשתמש בהרשאה ובממשקי ה-API.

הפעלת תרחיש של חיסכון בסוללה

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