रूटीन के हिसाब से बैटरी सेवर मोड

Android 10 में, बैटरी सेवर मोड को शेड्यूल करने का विकल्प दिया गया है. इसे रूटीन के हिसाब से कहा जाता है. इस विकल्प की मदद से, OEM के चुने गए ऐप्लिकेशन को सिस्टम को सिग्नल देने की अनुमति मिलती है. इससे, बैटरी सेवर मोड को ज़्यादा बेहतर तरीके से शेड्यूल किया जा सकता है. इस विकल्प को कॉन्फ़िगर करना ज़रूरी है. हालांकि, इसे लागू करना ज़रूरी नहीं है.

डिवाइस कॉन्फ़िगरेशन

सेवा देने वाली कंपनी की जानकारी

सेटिंग यूज़र इंटरफ़ेस (यूआई) को यह सूचना देने के लिए कि डिवाइस सही तरीके से कॉन्फ़िगर किया गया है, अपने कॉन्फ़िगर ओवरले का इस्तेमाल करके config_batterySaverScheduleProvider वैल्यू को अपने ऐप्लिकेशन के पैकेज के नाम से बदलें.

उदाहरण के लिए, अगर आपको ऐप्लिकेशन पैकेज com.google.android.apps.turbo को रूटीन के आधार पर सेटिंग को कंट्रोल करना है, तो आपको यह कॉन्फ़िगरेशन वैल्यू सेट करनी होगी:

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

अब फ़ोन पर, रूटीन के हिसाब से विकल्प दिखेगा. पुष्टि करने के लिए, अपनी इमेज बनाएं और उसे फ़ोन पर फ़्लैश करें. इसके बाद, सेटिंग > बैटरी > बैटरी सेवर > बैटरी सेवर शेड्यूल करें पर जाएं. आपको रूटीन के आधार पर विकल्प दिखेगा.

डिफ़ॉल्ट रूप से बंद होने की सीमा

नया config_dynamicPowerSavingsDefaultDisableThreshold फ़ील्ड, बैटरी के उस लेवल के बारे में बताता है जिस पर सिस्टम, बैटरी सेवर मोड को बंद कर देता है. ऐसा तब होता है, जब रोटीन के आधार पर शेड्यूलर ने इसे चालू किया हो. सिस्टम में डिफ़ॉल्ट रूप से 80% का विकल्प सेट होता है. हालांकि, इसे बदला जा सकता है.

ऐप्लिकेशन का कॉन्फ़िगरेशन

अनुमतियां

ऐप्लिकेशन से बैटरी सेवर मोड चालू करने के लिए ज़रूरी एपीआई, अनुमति android.permission.POWER_SAVER से सुरक्षित किए जाते हैं. यह अनुमति, सिग्नेचर/खास अनुमति होती है. इसलिए, जिस ऐप्लिकेशन को privapp-whitelist में बैटरी सेवर मोड को ट्रिगर करने की अनुमति देनी है उसे यह अनुमति दें.

किसी ऐप्लिकेशन को privapp अनुमति देने का उदाहरण:

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

अगर आपने सिस्टम इमेज पर मौजूद ऐप्लिकेशन के वर्शन को पहले से यह अनुमति नहीं दी है, तो ऐप्लिकेशन को अनुमति नहीं मिल सकती या एपीआई को सही तरीके से कॉल नहीं किया जा सकता. सिस्टम, अनुमति से जुड़ी सामान्य गड़बड़ियों के अलावा कोई और फ़ीडबैक नहीं देता. इसलिए, पुष्टि करें कि आपके पास एपीआई को कॉल करने और उनके असर को देखने का विकल्प है.

इंस्टॉलेशन

रूटीन के हिसाब से सुविधा ठीक से काम करे, इसके लिए आपको ऐप्लिकेशन को ज़रूरी अनुमति के साथ, सिस्टम इमेज पर पहले से इंस्टॉल करना होगा. सिर्फ़ एक ऐप्लिकेशन को POWER_SAVER अनुमति दें और उसे रूटीन के आधार पर काम करने वाले एपीआई को कंट्रोल करने की अनुमति दें. अगर एक से ज़्यादा ऐप्लिकेशन, अनुमति और एपीआई का इस्तेमाल करने की कोशिश करते हैं, तो इस सुविधा का व्यवहार कैसा होगा, यह तय नहीं है.

बैटरी सेवर मोड चालू करना

API

मान लें कि सेटअप अब तक पूरा हो गया है. ऐसे में, कॉन्फ़िगरेशन में बताए गए OEM ऐप्लिकेशन को बैटरी सेवर मोड को ट्रिगर करने के लिए, PowerManager में उससे जुड़े तरीके को कॉल करना चाहिए:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

अगर रूटीन के आधार पर बैटरी सेवर मोड को शेड्यूल करने का विकल्प चालू है और ऐप्लिकेशन, powerSaveHint के लिए true वैल्यू के साथ इस तरीके को कॉल करता है, तो बैटरी सेवर मोड चालू हो जाता है. disableThreshold की वैल्यू डालें, ताकि अगर ऐप्लिकेशन, सिस्टम के साथ कम्यूनिकेट न कर पाए, तब भी सिस्टम को पता रहे कि बैटरी के किस प्रतिशत पर बैटरी सेवर मोड को बंद करना सुरक्षित है.

इस एपीआई पर, उपयोगकर्ता की ओर से बदलाव किए जा सकते हैं. साथ ही, बैटरी सेवर मोड को स्नूज़ किया जा सकता है. यह ठीक वैसा ही है जैसे बैटरी के प्रतिशत के आधार पर, बैटरी सेवर मोड अपने-आप चालू होने की सुविधा पर किया जाता है. ज़्यादा जानकारी के लिए, एपीआई से जुड़ा दस्तावेज़ देखें.

एपीआई को सही तरीके से कॉल किया गया है या नहीं, इसकी पुष्टि करने के लिए, क्वेरी सेटिंग को ग्लोबल पर सेट करें. इससे यह पुष्टि की जा सकेगी कि एपीआई कॉल के हिसाब से, बैकिंग सेटिंग की वैल्यू बदल गई है या नहीं.

उदाहरण के लिए, अगर उपयोगकर्ता ने रोज़ के हिसाब से बैटरी सेवर मोड चुना है और ऐप्लिकेशन 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 किस तरह के व्यवहार का इस्तेमाल करेगा. इसलिए, OEM को अपने इंटिग्रेशन की जांच करनी होगी, ताकि यह पक्का किया जा सके कि उसका व्यवहार उम्मीद के मुताबिक हो. खास तौर पर, पुष्टि करें कि डिवाइस इन टास्क को पूरा कर सकता है:

  • उपयोगकर्ता, बैटरी सेवर मोड के शेड्यूल के यूज़र इंटरफ़ेस (यूआई) में प्रतिशत के आधार पर विकल्प चुनता है और 15% चुनता है. बैटरी सेवर की सुविधा सिर्फ़ 15% बैटरी बचने पर अपने-आप चालू होनी चाहिए.
  • उपयोगकर्ता, बैटरी सेवर मोड के शेड्यूल के यूज़र इंटरफ़ेस (यूआई) में, रूटीन के हिसाब से को चुनता है. जब ऐप्लिकेशन true के साथ एपीआई को कॉल करता है, तो बैटरी सेवर की सुविधा चालू हो जाती है. इसके अलावा, अगर डिवाइस को तय थ्रेशोल्ड तक चार्ज करने के बाद, उसे चार्जिंग से हटा दिया जाता है, तो बैटरी सेवर मोड अपने-आप बंद हो जाता है.
  • उपयोगकर्ता, बैटरी सेवर मोड के शेड्यूल वाले यूज़र इंटरफ़ेस में कोई नहीं चुनता है. बैटरी सेवर मोड कभी भी अपने-आप चालू नहीं होना चाहिए.
  • अगर ऐप्लिकेशन बैटरी सेवर मोड को चालू करता है और उपयोगकर्ता मैन्युअल तरीके से बैटरी सेवर मोड को फिर से बंद कर देता है (क्विक सेटिंग, सेटिंग वगैरह का इस्तेमाल करके), तो यह मोड तब तक बंद रहेगा, जब तक उपयोगकर्ता इसे मैन्युअल तरीके से फिर से चालू नहीं कर देता या डिवाइस को प्लग इन नहीं कर देता.