بهینه سازی معمول باتری

اندروید ۱۰ یک گزینه زمان‌بندی صرفه‌جویی در مصرف باتری به نام «مبتنی بر روال» معرفی می‌کند. این گزینه به برنامه‌ای که توسط سازنده اصلی (OEM) انتخاب شده است، اجازه می‌دهد تا سیگنال‌هایی را برای زمان‌بندی هوشمندانه‌تر صرفه‌جویی در مصرف باتری به سیستم ارائه دهد. این گزینه نیاز به پیکربندی دارد و پیاده‌سازی آن اختیاری است.

پیکربندی دستگاه

این بخش نحوه پیکربندی دستگاه شما برای گزینه «بر اساس روال» را شرح می‌دهد.

مشخصات ارائه دهنده

برای اینکه به رابط کاربری تنظیمات اطلاع دهید که دستگاه به درستی پیکربندی شده است، از پوشش پیکربندی خود برای بازنویسی مقدار config_batterySaverScheduleProvider با نام بسته برنامه خود استفاده کنید. برای مثال، اگر می‌خواهید بسته برنامه com.google.android.apps.turbo تنظیمات Based on routine را کنترل کند، این مقدار پیکربندی را تنظیم کنید:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

برای تأیید، ایمیج خود را بسازید، آن را روی یک دستگاه فلش کنید و به تنظیمات بروید

باتری > صرفه‌جویی در باتری > برنامه‌ریزی صرفه‌جویی در باتری . گزینه «بر اساس روال» ظاهر می‌شود.

آستانه پیش‌فرض خاموش

فیلد config_dynamicPowerSavingsDefaultDisableThreshold سطحی از باتری را مشخص می‌کند که در آن، سیستم در صورت فعال بودن زمان‌بند Based on routine ، حالت صرفه‌جویی در مصرف باتری را خاموش می‌کند. پیش‌فرض سیستم ۸۰٪ است، اما می‌توانید آن را تغییر دهید.

پیکربندی برنامه

این بخش نحوه پیکربندی برنامه شما برای استفاده از گزینه «بر اساس روال» را شرح می‌دهد.

مجوزها

APIهای لازم برای فعال‌سازی روتین Battery Saver توسط مجوز 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ها را فراخوانی کند و اثرات آنها را مشاهده کند، بسیار مهم است.

نصب

برای اینکه Based on routine به درستی کار کند، باید برنامه را با مجوز مورد نیاز از قبل روی system image نصب کنید. فقط به یک برنامه مجوز android.permission.POWER_SAVER بدهید و اجازه دهید APIهای Based on routine را کنترل کند. اگر بیش از یک برنامه سعی در استفاده از مجوز و APIها داشته باشد، رفتار این ویژگی پشتیبانی نشده و نامشخص است.

فعال کردن روال صرفه‌جویی در باتری

این بخش توضیح می‌دهد که چگونه برنامه شما می‌تواند با استفاده از APIهای ارائه شده، بر اساس روال صرفه‌جویی در مصرف باتری، حالت «براساس صرفه‌جویی در مصرف باتری» را فعال کند.

رابط‌های برنامه‌نویسی کاربردی (API)

اگر راه‌اندازی موفقیت‌آمیز باشد، برنامه OEM مشخص‌شده در پیکربندی می‌تواند با موفقیت متد مرتبط را در PowerManager برای فعال‌سازی Battery Saver فراخوانی کند:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

اگر گزینه‌ی زمان‌بندی «بر اساس روال» (Based on routine) برای صرفه‌جویی در مصرف باتری فعال باشد و برنامه این متد را با مقدار true برای powerSaveHint فراخوانی کند، صرفه‌جویی در مصرف باتری فعال می‌شود. مقدار disableThreshold را مشخص کنید تا اگر برنامه نتواند با سیستم ارتباط برقرار کند، سیستم همچنان درصد باتری را که در آن می‌توان صرفه‌جویی در مصرف باتری را با خیال راحت خاموش کرد، بداند.

این API مانند Battery Saver خودکار مبتنی بر درصد، در معرض لغو تنظیمات توسط کاربر و به تعویق انداختن Battery Saver است. برای اطلاعات بیشتر به مستندات API مراجعه کنید.

برای تأیید اینکه APIها با موفقیت فراخوانی می‌شوند، تنظیمات سراسری را بررسی کنید تا مطمئن شوید که مقدار تنظیمات پشتیبان مطابق با فراخوانی‌های API تغییر کرده است. برای مثال، اگر حالت Based on routine Battery Saver را انتخاب کنید و برنامه 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) رفتاری را که باعث فعال شدن حالت صرفه‌جویی در باتری (Battery Saver) می‌شود، تعیین می‌کند. تولیدکنندگان اصلی باید ادغام خود را آزمایش کنند تا تأیید کنند که این رفتار مطابق با انتظارات است. به طور خاص، تأیید کنید که دستگاه می‌تواند وظایف زیر را انجام دهد:

  • بر اساس درصد: اگر در رابط کاربری برنامه‌ی Battery Saver ، گزینه‌ی Based on percentage را انتخاب کنید و ۱۵٪ را انتخاب کنید، Battery Saver فقط زمانی که باتری به ۱۵٪ برسد، به‌طور خودکار فعال می‌شود.
  • بر اساس روال: اگر در رابط کاربری برنامه‌ی Battery Saver ، گزینه‌ی «بر اساس روال» را انتخاب کنید، Battery Saver زمانی فعال می‌شود که برنامه، API را با true فراخوانی کند. علاوه بر این، اگر دستگاه تا سطح آستانه‌ی مشخص‌شده شارژ شود و از برق کشیده شود، Battery Saver به‌طور خودکار خاموش می‌شود.
  • هیچکدام: اگر در رابط کاربری برنامه‌ی Battery Saver گزینه‌ی None را انتخاب کنید، Battery Saver هرگز به‌طور خودکار فعال نمی‌شود.
  • لغو دستی: اگر برنامه، حالت صرفه‌جویی در مصرف باتری را فعال کند و شما به صورت دستی (با استفاده از تنظیمات سریع ، تنظیمات یا روش‌های دیگر) حالت صرفه‌جویی در مصرف باتری را غیرفعال کنید، این حالت تا زمانی که آن را به صورت دستی دوباره فعال نکنید یا دستگاه را به برق وصل نکنید، خاموش می‌ماند.