हमेशा चालू रहने वाले ऐप्लिकेशन और सिस्टम ऐंबियंट मोड

जब कोई उपयोगकर्ता अपनी स्मार्टवॉच का इस्तेमाल करना बंद कर देता है, तो Wear OS, चालू ऐप्लिकेशन को कम बैटरी मोड में अपने-आप स्विच कर देता है. इसे सिस्टम ऐंबियंट मोड कहा जाता है. उपयोगकर्ता के स्मार्टवॉच से इंटरैक्ट करने के बाद, ऐप्लिकेशन फिर से शुरू हो जाता है. ऐसा तब होता है, जब इनमें से कोई एक शर्त पूरी हो:

  • उपयोगकर्ता का इंटरैक्शन, टाइम आउट से पहले किसी तय समयसीमा के दौरान होता है.
  • ऐप्लिकेशन ने मौजूदा गतिविधि शुरू करने का एलान किया है.

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

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

अपना प्रोजेक्ट कॉन्फ़िगर करना

ऐंबियंट मोड के साथ काम करने के लिए, यह तरीका अपनाएं:

  1. स्मार्टवॉच ऐप्लिकेशन बनाएं और चलाएं पेज पर मौजूद कॉन्फ़िगरेशन के आधार पर, अपना प्रोजेक्ट बनाएं या अपडेट करें.
  2. (सिर्फ़ Wear OS 4 या इससे पहले के वर्शन पर ज़रूरी है) Android मेनिफ़ेस्ट फ़ाइल में WAKE_LOCK अनुमति जोड़ें:
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>

हमेशा चालू रहने वाला मोड चालू करना

Wear OS 6 से, targetSdkVersion को 36 या उससे ज़्यादा पर सेट करने वाले ऐप्लिकेशन, डिफ़ॉल्ट रूप से हमेशा चालू रहते हैं. ये ऐप्लिकेशन, सिस्टम के ऐंबियंट मोड के दौरान, बिना किसी कॉन्फ़िगरेशन के सीमित समय के लिए दिखते हैं. अगर आपके ऐप्लिकेशन का targetSdkVersion 36 से कम है या आपके ऐप्लिकेशन को Wear OS 5 या उससे पहले के वर्शन पर चलाना है, तो अपने ऐप्लिकेशन को हमेशा चालू रखने के लिए, AmbientLifecycleObserver क्लास का इस्तेमाल करें.

AmbientLifecycleObserver क्लास का इस्तेमाल करके, ऐंबियंट मोड के इवेंट पर प्रतिक्रिया देना

ऐप्लिकेशन, ऐंबियंट मोड इवेंट पर सीधे प्रतिक्रिया देने के लिए, AmbientLifecycleObserver क्लास का भी इस्तेमाल कर सकते हैं:

  1. AmbientLifecycleObserver.AmbientLifecycleCallback इंटरफ़ेस को लागू करें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है. इस चरण में, तरीके खाली हैं. हालांकि, गाइड में बाद में बताया गया है कि ऐंबियंट मोड में जाने और उससे बाहर निकलने के लिए, विज़ुअलाइज़ेशन में कौनसे बदलाव करने चाहिए.

    Kotlin

    val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback {
        override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) {
        // ... Called when moving from interactive mode into ambient mode.
        }
    
        override fun onExitAmbient() {
        // ... Called when leaving ambient mode, back into interactive mode.
        }
    
        override fun onUpdateAmbient() {
        // ... Called by the system in order to allow the app to periodically
        // update the display while in ambient mode. Typically the system will
        // call this every 60 seconds.
        }
    }
  2. AmbientLifecycleObserver बनाएं और ऑब्ज़र्वर को रजिस्टर करें. आम तौर पर, इसका इस्तेमाल onCreate() या टॉप-लेवल कॉम्पोज़ेबल में किया जाता है. ऐसा तब किया जाता है, जब Wear OS के लिए Compose का इस्तेमाल किया जा रहा हो. इससे गतिविधि के पूरे लाइफ़साइकल के दौरान, हमेशा चालू रहने की सुविधा चालू की जा सकती है.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
  3. जब हमेशा चालू रहने की सुविधा की ज़रूरत न हो, तो removeObserver() को कॉल करके ऑब्ज़र्वर हटाएं. उदाहरण के लिए, इस तरीके को अपनी गतिविधि के onDestroy() तरीके में कॉल किया जा सकता है.

TimeText विजेट का इस्तेमाल करके, समय का टेक्स्ट अपडेट करना

Wear OS 6 से, TimeText विजेट, ऐंबियंट मोड के हिसाब से काम करता है. अगर आपके ऐप्लिकेशन को ऐंबियंट मोड के दौरान, हर मिनट समय का टेक्स्ट अपडेट करना है, तो AmbientLifecycleObserver का इस्तेमाल किए बिना, सिर्फ़ TimeText विजेट का इस्तेमाल किया जा सकता है.

हमेशा चालू रहने वाले ऐप्लिकेशन, बैकग्राउंड में चल सकते हैं

Wear OS 5 में, सिस्टम हमेशा चालू रहने वाले ऐप्लिकेशन को बैकग्राउंड में ले जाता है. ऐसा तब होता है, जब वे ऐप्लिकेशन कुछ समय तक ऐंबियंट मोड में दिखते हैं. उपयोगकर्ता, सिस्टम सेटिंग में जाकर टाइम आउट को कॉन्फ़िगर कर सकते हैं.

अगर आपका हमेशा चालू रहने वाला ऐप्लिकेशन, उपयोगकर्ता के किसी मौजूदा टास्क की जानकारी दिखाता है, जैसे कि संगीत चलाना या कसरत का सेशन, तो हो सकता है कि आप टास्क पूरा होने तक, मौजूदा गतिविधि को दिखता रखना चाहें. ऐसा करने के लिए, Ongoing Activity API का इस्तेमाल करके, हमेशा चालू रहने वाली गतिविधि से जुड़ी सूचना पोस्ट करें.

सिस्टम को चल रही गतिविधि की पहचान करने के लिए, चल रही सूचना के टच इंटेंट को हमेशा चालू रहने वाली गतिविधि पर ले जाना चाहिए, जैसा कि यहां दिए गए कोड स्निपेट में दिखाया गया है:

// Create a pending intent that point to your always-on activity
val touchIntent =
    PendingIntent.getActivity(
        context,
        0,
        Intent(context, MyAlwaysOnActivity::class.java),
        PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
    )

val notificationBuilder =
    NotificationCompat.Builder(this, CHANNEL_ID)
    // ...
    .setOngoing(true)

val ongoingActivity =
    OngoingActivity.Builder(
        applicationContext, NOTIFICATION_ID, notificationBuilder
    )
    // ...
    .setTouchIntent(touchIntent)
    .build()

ongoingActivity.apply(applicationContext)

notificationManager.notify(
    NOTIFICATION_ID,
    notificationBuilder.build()
)

एंबियंट मोड में उपयोगकर्ता अनुभव में बदलाव करना

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

बैटरी बचाने के लिए, ये काम करें:

  • कम पिक्सल को रोशन करें. ऐंबियंट मोड में सिर्फ़ ज़रूरी जानकारी दिखाएं. साथ ही, जब उपयोगकर्ता इंटरैक्टिव मोड में आए, तो ज़्यादा जानकारी दें.
  • स्क्रीन का कम से कम 85% हिस्सा काला रखें, भरने की सुविधा हटाएं, और बटन और बड़े आइकॉन के लिए आउटलाइन का इस्तेमाल करें.
  • ग़ैर-ज़रूरी जानकारी न दिखाएं. जैसे, काम न करने वाली ब्रैंडिंग और बैकग्राउंड इमेज.
  • ऐक्टिव और हमेशा चालू रहने वाले मोड में, एलिमेंट को एक ही जगह पर रखें और समय को हमेशा दिखाएं.
  • कम बार अपडेट किए जाने वाले कॉन्टेंट में बदलाव करें. उदाहरण के लिए, टाइमर को सेकंड के बजाय, मिनट के हिसाब से दिखाना.
  • अक्षरों और अंकों वाले ऐसे कॉन्टेंट के लिए प्लेसहोल्डर यूज़र इंटरफ़ेस (यूआई) को हटाएं या दिखाएं जो बार-बार अपडेट होता है, जैसे कि दूरी या समय.
  • बार-बार अपडेट होने वाले प्रोग्रेस इंडिकेटर हटाएं. जैसे, काउंटडाउन रिंग और मीडिया सेशन के लिए.
  • हमेशा चालू रहने वाले मोड में प्रवेश करते समय, अगर उपयोगकर्ता पहले आपके ऐप्लिकेशन में किसी कॉन्फ़िगरेशन या सेटिंग स्क्रीन पर था, तो इसके बजाय अपने ऐप्लिकेशन में ज़्यादा काम की स्क्रीन दिखाएं.
  • AmbientDetails onEnterAmbient() को पास किए गए ऑब्जेक्ट में:
    • अगर deviceHasLowBitAmbient सेट है, तो जहां भी हो सके वहां ऐंटी-ऐलिऐसिंग बंद करें.
    • अगर burnInProtectionRequired सेट है, तो समय-समय पर विज़ुअलाइज़ेशन को एक जगह से दूसरी जगह पर ले जाएं और पूरी तरह से सफ़ेद जगहों से बचें.
  • ऐंबियंट मोड के दौरान, लगातार ऐनिमेशन चलाने से बचें. Wear OS 5.1 में, ऐंबियंट मोड के दौरान ऐनिमेशन चलने बंद हो सकते हैं.

बिना किसी रुकावट के विज्ञापन दिखाने के लिए चेकलिस्ट

ऐसा हो सकता है कि डिवाइस के अलग-अलग स्टेटस के दौरान, आपको डिसप्ले पर दिखने वाली जानकारी पर ज़्यादा कंट्रोल चाहिए हो. उदाहरण के लिए, जब कसरत करने के दौरान, कसरत करने की सुविधा देने वाले ऐप्लिकेशन को डिसप्ले पर स्मार्टवॉच की होम स्क्रीन नहीं दिखनी हो. इन मामलों में, ये काम करें:

  1. AmbientLifecycleObserver.AmbientLifecycleCallback इंटरफ़ेस को लागू करें.
  2. डिवाइस के सिस्टम ऐंबियंट मोड में होने पर इस्तेमाल करने के लिए, कम बैटरी वाले डिवाइस के लिए नया लेआउट बनाएं.
  3. वर्कआउट के दौरान, चल रही गतिविधि लागू करें.

यह कैसे किया जा सकता है, इसका उदाहरण देखने के लिए GitHub पर, कॉम्पोज़ करने की सुविधा पर आधारित ऐप्लिकेशन का सैंपल देखें. इसमें Horologist लाइब्रेरी के AmbientAware composable का इस्तेमाल किया गया है.