रूटीन बैटरी सेवर

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