Android 11 में, स्लीप मोड में जाने की सुविधा, बैटरी बचाने वाली सुविधा है. इसकी मदद से, उपयोगकर्ता के डिवाइस पर कोई गतिविधि न होने पर, स्क्रीन बंद होने का समय सेट किया जा सकता है. भले ही, FLAG_KEEP_SCREEN_ON
वाली विंडो दिख रही हों या FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
या SCREEN_DIM_WAKE_LOCK
लेवल के वेक लॉक चालू हों.
लेवल PARTIAL_WAKE_LOCK
वाले वेकलॉक पर, इस सुविधा का कोई असर नहीं पड़ता.
टाइम आउट खत्म होने से कुछ समय पहले, उपयोगकर्ता को एक मैसेज दिखाया जा सकता है. इसमें उसे चेतावनी दी जाती है कि अगर वह डिवाइस का इस्तेमाल नहीं करता है, तो डिवाइस स्लीप मोड में चला जाएगा.
इस संदर्भ में, उपयोगकर्ता गतिविधि का मतलब ऐसी किसी भी चीज़ से है जो PowerManager#userActivity
(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
के बिना) को कॉल ट्रिगर करती है. इनमें ये शामिल हैं, लेकिन इन तक ही सीमित नहीं हैं:
- टचस्क्रीन के साथ इंटरैक्ट करना
- फ़िज़िकल बटन दबाना
- किसी बाहरी ऐक्सेसरी से इनपुट इवेंट (उदाहरण के लिए, कनेक्ट किया गया कीबोर्ड, ब्लूटूथ रिमोट, और आईआर रिमोट)
- वॉइस इंटरैक्शन
- One Touch Play जैसे कुछ एचडीएमआई सीईसी मैसेज पाना
- नया कास्ट सेशन शुरू करना
पसंद के मुताबिक बनाएं
अगर यह सुविधा चालू है, तो डिवाइस पर उपयोगकर्ता के कुछ समय तक ऐक्टिव न रहने पर, स्क्रीन पर चेतावनी दिखती है. अगर कोई कार्रवाई नहीं की जाती है, तो स्क्रीन बंद हो जाती है. कॉन्फ़िगरेशन के इन विकल्पों का इस्तेमाल करके, इस सुविधा को अपनी पसंद के मुताबिक बनाया जा सकता है.
टाइम आउट कॉन्फ़िगर करना
टाइम आउट कॉन्फ़िगर करने के लिए, frameworks/base/core/res/res/values/config.xml
में यह एलिमेंट अपडेट करें:
config_attentiveTimeout
- उपयोगकर्ता के इनपुट न मिलने की वह समयसीमा तय होती है जिसके बाद स्क्रीन बंद हो जाती है. इसे मिलीसेकंड में नापा जाता है. भले ही, स्क्रीन के लिए वेकलॉक चालू हों.
- बिल्ड के समय सेट किया जाता है.
- अगर वैल्यू
0
सेconfig_minimumScreenOffTimeout
के बीच है, तो डिवाइस के फिर से चालू होने के कुछ समय बाद स्क्रीन बंद होने से रोकने के लिए, टाइम आउटconfig_minimumScreenOffTimeout
पर सेट किया जाता है. - डिफ़ॉल्ट:
-1
, जो इस सुविधा को बंद करता है.
डिफ़ॉल्ट टाइम आउट बदलना
टाइम आउट की डिफ़ॉल्ट सेटिंग को बदलने के लिए, नीचे दिए गए एलिमेंट को अपडेट करें.
Settings.Secure.ATTENTIVE_TIMEOUT
- अगर यह सेट है, तो
config_attentiveTimeout
से सेट किए गए डिफ़ॉल्ट टाइम आउट को बदल देता है. - रनटाइम के दौरान सेट किया जा सकता है.
चेतावनी दिखने से पहले की अवधि कॉन्फ़िगर करना
कुल समय कॉन्फ़िगर करने के लिए, frameworks/base/core/res/res/values/config.xml
में यह एलिमेंट अपडेट करें:
config_attentiveWarningDuration
- उपयोगकर्ता के डिवाइस का इस्तेमाल न करने की वह समयसीमा तय होती है जिसके बाद स्क्रीन बंद हो जाती है. साथ ही, यह भी तय होता है कि स्क्रीन बंद होने से पहले, उपयोगकर्ता को चेतावनी का मैसेज कितनी देर तक दिखाया जाए.
- यह वैल्यू, डिवाइस के कुछ समय से इस्तेमाल में न होने पर स्लीप मोड में जाने के लिए सेट किए गए टाइम आउट से काफ़ी कम होनी चाहिए. ऐसा न होने पर, चेतावनी वाला डायलॉग लगातार दिखता रहेगा और उसे खारिज नहीं किया जा सकेगा.
- डिफ़ॉल्ट:
30000
(30 सेकंड).
TvSettings में टाइम आउट की सेटिंग दिखाना
टाइम आउट की सेटिंग दिखाने के लिए, packages/apps/TvSettings/Settings/res/values/config.xml
में यह एलिमेंट अपडेट करें:
config_show_standby_timeout
- मीडिया चलाने के दौरान स्क्रीन बंद करने की अनुमति देने के लिए, प्राथमिकता आइटम दिखाना है या नहीं.
- डिफ़ॉल्ट:
false
.
चेतावनी वाले यूज़र इंटरफ़ेस (यूआई) के लिए संसाधन
- चेतावनी वाले डायलॉग का लेआउट,
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
में बताया गया है. - डायलॉग के लिए ये स्ट्रिंग,
frameworks/base/packages/SystemUI/res/values/strings.xml
औरframeworks/base/packages/SystemUI/res-product/values/strings.xml
में तय की गई हैं. inattentive_sleep_warning_title
inattentive_sleep_warning_message
रिसॉर्स ओवरले की मदद से, बिल्ड टाइम कॉन्फ़िगरेशन और रिसॉर्स बदले जा सकते हैं.
लागू करना
इस सुविधा को चालू करने के लिए, यह तरीका अपनाएं.
- डिफ़ॉल्ट
config_attentiveTimeout
को बदलें. - AOSP
TvSettings
का इस्तेमाल करने पर: - सेटिंग में जाकर,
config_show_standby_timeout
को बदलकर इस सुविधा को बंद करें. Settings.Secure.ATTENTIVE_TIMEOUT
सेट करने वाली अपनी सेटिंग लागू करें.
पुष्टि करें
इस सुविधा के लिए, सीटीएस टेस्ट cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
पर उपलब्ध हैं.
उदाहरण और सोर्स
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
में चेतावनी देने वाला डिफ़ॉल्ट यूज़र इंटरफ़ेस (यूआई) लागू होता है.packages/apps/TvSettings
में, सेटिंग में सुविधा को दिखाने का उदाहरण दिया गया है.
मैन्युअल टेस्ट केस का उदाहरण
अगर डिवाइस के हेल्थ एचएएल से पता चलता है कि डिवाइस में बैटरी है (
battery_present
true
है), तो पक्का करें किstay_on_while_plugged_in
डेवलपर सेटिंग बंद हो. ऐसा इसलिए, क्योंकि इससे इस सुविधा की मदद से स्क्रीन बंद नहीं हो पाएगी.
adb shell settings put global stay_on_while_plugged_in 0
- डिवाइस के इस्तेमाल में ध्यान न देने की वजह से स्लीप मोड में जाने की समयसीमा, चेतावनी वाले डायलॉग बॉक्स की अवधि से कुछ सेकंड ज़्यादा होनी चाहिए.
adb shell settings put secure attentive_timeout 32000
- स्क्रीन वॉकलॉक पाने के लिए, कोई वीडियो चलाएं.
- पुष्टि करें कि कुछ सेकंड बाद, स्लीप मोड की चेतावनी वाला डायलॉग दिखता है.
- पुष्टि करें कि सेट किए गए टाइम आउट की समयसीमा खत्म होने के बाद, स्क्रीन बंद हो जाती है.