इस गाइड में, अपने ऐप्लिकेशन को हमेशा चालू रखने, डिवाइस की पावर की स्थिति में होने वाले बदलावों पर प्रतिक्रिया देने, और ऐप्लिकेशन के व्यवहार को मैनेज करने का तरीका बताया गया है. इससे, बैटरी बचाने के साथ-साथ उपयोगकर्ता को बेहतर अनुभव भी दिया जा सकता है.
किसी ऐप्लिकेशन को हमेशा दिखने की सुविधा चालू करने से, बैटरी लाइफ़ पर काफ़ी असर पड़ता है. इसलिए, इस सुविधा को जोड़ते समय, डिवाइस की बैटरी पर पड़ने वाले असर का ध्यान रखें.
खास कॉन्सेप्ट
जब Wear OS ऐप्लिकेशन फ़ुल स्क्रीन पर दिखता है, तो वह इनमें से किसी एक पावर मोड में होता है:
- इंटरैक्टिव: यह डिवाइस की हाई-पॉवर मोड की स्थिति होती है. इसमें स्क्रीन की रोशनी पूरी होती है और उपयोगकर्ता ऐप्लिकेशन के साथ पूरी तरह से इंटरैक्ट कर सकता है.
- ऐंबियंट: यह बैटरी की कम खपत करने वाली स्थिति होती है. इसमें डिसप्ले की रोशनी कम हो जाती है, ताकि बैटरी बचाई जा सके. इस स्थिति में, आपके ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) अब भी पूरी स्क्रीन पर दिखता है. हालांकि, सिस्टम इसे धुंधला करके या समय जैसे कॉन्टेंट को ओवरले करके, इसके दिखने के तरीके में बदलाव कर सकता है. इसे ऐंबियंट मोड भी कहा जाता है.
ऑपरेटिंग सिस्टम, इन स्थितियों के बीच ट्रांज़िशन को कंट्रोल करता है.
हमेशा चालू रहने वाला ऐप्लिकेशन, ऐसा ऐप्लिकेशन होता है जो इंटरैक्टिव और ऐंबियंट, दोनों मोड में कॉन्टेंट दिखाता है.
जब डिवाइस कम बैटरी वाले ऐंबियंट मोड में हो, तब भी हमेशा चालू रहने वाला ऐप्लिकेशन अपना यूज़र इंटरफ़ेस (यूआई) दिखाता रहे, तो उसे ऐंबियंट मोड में बताया जाता है.
सिस्टम ट्रांज़िशन और डिफ़ॉल्ट बिहेवियर
जब कोई ऐप्लिकेशन फ़ोरग्राउंड में होता है, तब सिस्टम, पावर स्टेटस के ट्रांज़िशन को मैनेज करता है. यह ट्रांज़िशन, उपयोगकर्ता के डिवाइस का इस्तेमाल न करने की वजह से ट्रिगर होने वाले दो टाइम आउट के आधार पर होता है.
- टाइम आउट #1: इंटरैक्टिव से ऐंबियंट मोड पर स्विच होना: उपयोगकर्ता के डिवाइस का इस्तेमाल न करने के बाद, डिवाइस ऐंबियंट मोड पर स्विच हो जाता है.
- दूसरा टाइम आउट: स्मार्ट वॉच की होम स्क्रीन पर वापस आना: कोई गतिविधि न होने पर, कुछ समय बाद सिस्टम मौजूदा ऐप्लिकेशन को छिपा सकता है और स्मार्ट वॉच की होम स्क्रीन दिखा सकता है.
सिस्टम के ऐंबियंट मोड में पहली बार ट्रांज़िशन होने के तुरंत बाद, डिफ़ॉल्ट तरीके से काम करने की सुविधा, Wear OS के वर्शन और आपके ऐप्लिकेशन के कॉन्फ़िगरेशन पर निर्भर करती है:
- Wear OS 5 और उससे पहले के वर्शन पर, सिस्टम आपके रोके गए ऐप्लिकेशन का धुंधला स्क्रीनशॉट दिखाता है. साथ ही, स्क्रीनशॉट के ऊपर ऐप्लिकेशन के बंद होने का समय दिखता है.
- Wear OS 6 और उसके बाद के वर्शन पर, अगर कोई ऐप्लिकेशन SDK टूल 36 या उसके बाद के वर्शन को टारगेट करता है, तो उसे हमेशा चालू रहने वाला ऐप्लिकेशन माना जाता है. डिसप्ले की रोशनी कम हो जाती है, लेकिन ऐप्लिकेशन चलता रहता है और दिखता रहता है. (हो सकता है कि अपडेट हर मिनट में एक बार ही भेजे जाएं.)
ऐंबियंट मोड के लिए, डिवाइस के व्यवहार को पसंद के मुताबिक बनाना
सिस्टम के डिफ़ॉल्ट व्यवहार के बावजूद, Wear OS के सभी वर्शन पर, ऐंबियंट मोड में अपने ऐप्लिकेशन के दिखने या काम करने के तरीके को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, AmbientLifecycleObserver
का इस्तेमाल करके, ऐंबियंट मोड से किसी दूसरे मोड में स्विच करने पर कॉलबैक सुनें.
AmbientLifecycleObserver का इस्तेमाल करना
ऐंबियंट मोड के इवेंट पर प्रतिक्रिया देने के लिए, AmbientLifecycleObserver
क्लास का इस्तेमाल करें:
AmbientLifecycleObserver.AmbientLifecycleCallback
इंटरफ़ेस लागू करें. कम बैटरी मोड के लिए अपने यूज़र इंटरफ़ेस (यूआई) में बदलाव करने के लिए,onEnterAmbient()
तरीके का इस्तेमाल करें. साथ ही, इसे फिर से पूरी तरह इंटरैक्टिव डिसप्ले पर वापस लाने के लिए,onExitAmbient()
तरीके का इस्तेमाल करें.val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback { override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) { // ... Called when moving from interactive mode into ambient mode. // Adjust UI for low-power state: dim colors, hide non-essential elements. } override fun onExitAmbient() { // ... Called when leaving ambient mode, back into interactive mode. // Restore full UI. } override fun onUpdateAmbient() { // ... Called by the system periodically (typically once per minute) // to allow the app to update its display while in ambient mode. } }
कोई
AmbientLifecycleObserver
बनाएं और उसे अपनी गतिविधि या कॉम्पोज़ेबल के लाइफ़साइकल के साथ रजिस्टर करें.private val ambientObserver = AmbientLifecycleObserver(activity, ambientCallback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(ambientObserver) // ... }
onDestroy()
में ऑब्ज़र्वर को हटाने के लिए,removeObserver()
को कॉल करें.
Jetpack Compose का इस्तेमाल करने वाले डेवलपर के लिए, Horologist लाइब्रेरी एक मददगार टूल उपलब्ध कराती है. यह टूल, AmbientAware
composable है. इसकी मदद से, इस पैटर्न को लागू करना आसान हो जाता है.
ऐंबियंट-अवेयर TimeText
कस्टम ऑब्ज़र्वर की ज़रूरत न होने के अपवाद के तौर पर, Wear OS 6 पर TimeText
विजेट, ऐंबियंट-अवेयर होता है. जब डिवाइस ऐंबियंट मोड में होता है, तो यह हर मिनट में अपने-आप अपडेट होता है. इसके लिए, किसी अतिरिक्त कोड की ज़रूरत नहीं होती.
स्क्रीन के चालू रहने का समय कंट्रोल करना
नीचे दिए गए सेक्शन में, यह मैनेज करने का तरीका बताया गया है कि आपका ऐप्लिकेशन स्क्रीन पर कितनी देर तक दिखेगा.
किसी गतिविधि के दौरान, स्मार्टवॉच की होम स्क्रीन पर वापस जाने से रोकना
ऐंबियंट मोड (टाइम आउट #2) में कुछ समय के बाद, सिस्टम आम तौर पर स्मार्टवॉच की होम स्क्रीन पर वापस आ जाएगा. उपयोगकर्ता, सिस्टम सेटिंग में जाकर टाइम आउट की अवधि को कॉन्फ़िगर कर सकता है. कुछ खास मामलों में, ऐप्लिकेशन को ज़्यादा समय तक दिखने की ज़रूरत पड़ सकती है. जैसे, जब कोई उपयोगकर्ता कसरत ट्रैक कर रहा हो.
Wear OS 5 और इसके बाद के वर्शन पर, मौजूदा गतिविधि लागू करके, ऐसा होने से रोका जा सकता है. अगर आपका ऐप्लिकेशन, उपयोगकर्ता के किसी मौजूदा टास्क की जानकारी दिखा रहा है, जैसे कि कसरत का सेशन, तो टास्क खत्म होने तक अपने ऐप्लिकेशन को दिखने के लिए, Ongoing Activity API का इस्तेमाल किया जा सकता है. अगर कोई उपयोगकर्ता मैन्युअल तरीके से स्मार्टवॉच की होम स्क्रीन पर वापस आता है, तो उस समय चल रही गतिविधि का इंंडिकेटर, उसे एक टैप में आपके ऐप्लिकेशन पर वापस ले जाता है
इसे लागू करने के लिए, चल रही सूचना के टच इंटेंट को हमेशा चालू रहने वाली गतिविधि पर ले जाना चाहिए, जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:
private fun createNotification(): Notification { val activityIntent = Intent(this, AlwaysOnActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_SINGLE_TOP } val pendingIntent = PendingIntent.getActivity( this, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) // ... // ... .setOngoing(true) // ... val ongoingActivity = OngoingActivity.Builder(applicationContext, NOTIFICATION_ID, notificationBuilder) // ... // ... .setTouchIntent(pendingIntent) .build() ongoingActivity.apply(applicationContext) return notificationBuilder.build() }
स्क्रीन चालू रखना और ऐंबियंट मोड को बंद करना
कुछ मामलों में, आपको डिवाइस को ऐंबियंट मोड में जाने से पूरी तरह रोकना पड़ सकता है. इसका मतलब है कि टाइम आउट #1 से बचने के लिए. इसके लिए, FLAG_KEEP_SCREEN_ON
विंडो फ़्लैग का इस्तेमाल किया जा सकता है. यह वॉकी लॉक के तौर पर काम करता है. इससे डिवाइस इंटरैक्टिव मोड में बना रहता है. इसका इस्तेमाल पूरी सावधानी से करें, क्योंकि इससे बैटरी लाइफ़ पर काफ़ी असर पड़ता है.
ऐंबियंट मोड के लिए सुझाव
ऐंबियंट मोड में उपयोगकर्ता को बेहतरीन अनुभव देने और बैटरी बचाने के लिए, डिज़ाइन से जुड़े इन दिशा-निर्देशों का पालन करें.
- कम बैटरी वाले डिसप्ले का इस्तेमाल करना
- स्क्रीन का कम से कम 85% हिस्सा काला होना चाहिए.
- बड़े आइकॉन या बटन के लिए, पूरे आइकॉन को भरने के बजाय, आउटलाइन का इस्तेमाल करें.
- सिर्फ़ सबसे ज़रूरी जानकारी दिखाएं और दूसरी जानकारी को इंटरैक्टिव डिसप्ले पर ले जाएं.
- एक ही रंग के बड़े ब्लॉक और काम न करने वाली ब्रैंडिंग या बैकग्राउंड इमेज का इस्तेमाल न करें.
- पक्का करें कि कॉन्टेंट सही तरीके से अपडेट हो रहा हो
- स्टॉपवॉच, कसरत की दूरी या समय जैसे अक्सर बदलने वाले डेटा के लिए,
--
जैसे प्लेसहोल्डर कॉन्टेंट दिखाएं. इससे यह नहीं लगेगा कि कॉन्टेंट नया है. - लगातार अपडेट होने वाले प्रोग्रेस इंडिकेटर हटाएं. जैसे, काउंटडाउन रिंग और मीडिया सेशन के लिए.
onUpdateAmbient()
कॉलबैक का इस्तेमाल सिर्फ़ ज़रूरी अपडेट के लिए किया जाना चाहिए. आम तौर पर, हर मिनट में एक बार.
- स्टॉपवॉच, कसरत की दूरी या समय जैसे अक्सर बदलने वाले डेटा के लिए,
- एक जैसा लेआउट बनाए रखना
- आसानी से ट्रांज़िशन करने के लिए, इंटरैक्टिव और ऐंबियंट मोड में एलिमेंट को एक ही जगह पर रखें.
- समय हमेशा दिखे.
- कॉन्टेक्स्ट के बारे में जानकारी रखें
- अगर डिवाइस ऐंबियंट मोड में तब स्विच होता है, जब उपयोगकर्ता सेटिंग या कॉन्फ़िगरेशन स्क्रीन पर था, तो सेटिंग व्यू के बजाय अपने ऐप्लिकेशन की ज़्यादा काम की स्क्रीन दिखाएं.
- डिवाइस के हिसाब से ज़रूरी शर्तों को मैनेज करना
onEnterAmbient()
को पास किए गएAmbientDetails
ऑब्जेक्ट में:- अगर
deviceHasLowBitAmbient
true
है, तो जहां भी हो सके वहां ऐंटी-ऐलिऐसिंग बंद करें. - अगर
burnInProtectionRequired
true
है, तो समय-समय पर यूज़र इंटरफ़ेस (यूआई) के एलिमेंट को थोड़ा-बहुत शिफ़्ट करें. साथ ही, स्क्रीन के बर्न-इन से बचने के लिए, सफ़ेद रंग के बड़े हिस्सों का इस्तेमाल न करें.
- अगर
डीबग करना और जांच करना
ये adb
निर्देश, ऐप्लिकेशन को डेवलप करने या यह जांचने के दौरान काम के हो सकते हैं कि डिवाइस के ऐंबियंट मोड में होने पर, आपका ऐप्लिकेशन कैसा व्यवहार करता है:
# put device in ambient mode if the always on display is enabled in settings
# (and not disabled by other settings, such as theatre mode)
$ adb shell input keyevent KEYCODE_SLEEP
# put device in interactive mode
$ adb shell input keyevent KEYCODE_WAKEUP
उदाहरण: वर्कआउट ऐप्लिकेशन
कसरत करने के लिए बने ऐसे ऐप्लिकेशन पर विचार करें जिसे उपयोगकर्ता को कसरत के पूरे सेशन के दौरान मेट्रिक दिखानी हो. ऐप्लिकेशन, ऐंबियंट मोड के ट्रांज़िशन के दौरान दिखना चाहिए. साथ ही, उसे स्मार्ट वॉच की होम स्क्रीन से बदला नहीं जाना चाहिए.
ऐसा करने के लिए, डेवलपर को ये काम करने होंगे:
- इंटरैक्टिव और ऐंबियंट मोड के बीच यूज़र इंटरफ़ेस (यूआई) में होने वाले बदलावों को मैनेज करने के लिए,
AmbientLifecycleObserver
लागू करें. जैसे, स्क्रीन की रोशनी कम करना और ज़रूरी न होने वाला डेटा हटाना. - ऐंबियंट मोड के लिए, कम बैटरी खर्च करने वाला नया लेआउट बनाएं. यह लेआउट, सबसे सही तरीकों के मुताबिक होना चाहिए.
- चल रही गतिविधि के बारे में जानकारी देने वाले एपीआई का इस्तेमाल करके, वर्कआउट के दौरान स्मार्टवॉच की होम स्क्रीन पर वापस जाने से सिस्टम को रोकें.
पूरी तरह से लागू करने के लिए, GitHub पर Compose पर आधारित इस्तेमाल के उदाहरण देखें. इस सैंपल में, Horologist लाइब्रेरी के AmbientAware
composable का इस्तेमाल करने का तरीका भी दिखाया गया है. इससे, Compose में ऐंबियंट मोड को मैनेज करना आसान हो जाता है.