Android 11 में, इनैटेंटिव स्लीप, बैटरी बचाने वाली सुविधा है. इसकी मदद से, उपयोगकर्ता की गतिविधि न होने पर स्क्रीन बंद होने का समय सेट किया जा सकता है. इसके बाद, स्क्रीन बंद हो जाती है. भले ही, FLAG_KEEP_SCREEN_ON
वाले विंडो दिख रहे हों या FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
या SCREEN_DIM_WAKE_LOCK
लेवल के वेकलॉक होल्ड किए गए हों.
PARTIAL_WAKE_LOCK
लेवल वाले वेकलॉक पर, इस सुविधा का कोई असर नहीं पड़ता.
टाइम आउट होने से कुछ समय पहले, एक मैसेज दिखाया जा सकता है. इसमें उपयोगकर्ता को चेतावनी दी जाती है कि अगर वह डिवाइस के साथ इंटरैक्ट नहीं करता है, तो डिवाइस स्लीप मोड में चला जाएगा.
इस संदर्भ में, उपयोगकर्ता की गतिविधि का मतलब ऐसी किसी भी गतिविधि से है जो USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
फ़्लैग के बिना PowerManager#userActivity
को कॉल ट्रिगर करती है. इसमें ये शामिल हैं, लेकिन इनके अलावा और भी चीज़ें शामिल हो सकती हैं:
- टचस्क्रीन के साथ इंटरैक्ट करना
- फ़िज़िकल बटन दबाने पर
- किसी बाहरी ऐक्सेसरी से मिले इनपुट इवेंट (जैसे, कनेक्ट किया गया कीबोर्ड, ब्लूटूथ रिमोट, आईआर रिमोट)
- वॉइस इंटरैक्शन
- एचडीएमआई सीईसी के कुछ मैसेज पाना, जैसे कि 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
सेट करती हैं.
Validation
इस सुविधा के लिए, सीटीएस टेस्ट cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
पर उपलब्ध हैं.
उदाहरण और सोर्स
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
में, चेतावनी वाले यूज़र इंटरफ़ेस (यूआई) को लागू करने का डिफ़ॉल्ट तरीका शामिल होता है.packages/apps/TvSettings
में, सेटिंग में सुविधा को दिखाने का तरीका बताया गया है.
मैन्युअल टेस्ट केस का उदाहरण
अगर डिवाइस का हेल्थ HAL यह रिपोर्ट करता है कि डिवाइस में बैटरी है (
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
- वीडियो चलाना शुरू करें, ताकि स्क्रीन वेकलॉक मिल सके.
- पुष्टि करें कि नींद से जुड़ी चेतावनी वाला डायलॉग कुछ सेकंड बाद दिखता है.
- पुष्टि करें कि सेट किया गया टाइमआउट खत्म होने के बाद, स्क्रीन बंद हो जाती है.