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

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

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

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

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

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

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

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

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() तरीके में कॉल किया जा सकता है.

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

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.

ऊर्जा बचाने के लिए, नीचे दिए गए काम करें:

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

हमारा सुझाव है कि Wear OS के लिए Compose की सुविधा का इस्तेमाल करते समय, आप कॉलबैक के ये तरीके इस्तेमाल करें राज्य को अपडेट करने के लिए, इससे सिस्टम को यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करें.

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