बैकग्राउंड में बातचीत करना

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

इनमें से हर स्थिति के लिए, कई विकल्प उपलब्ध हैं. हर एक के अपने फ़ायदे और नुकसान हैं. इसलिए, अपनी ज़रूरत के हिसाब से सही विकल्प चुनें.

इस डायग्राम में, इस पेज पर दिए गए दिशा-निर्देशों को आसान तरीके से दिखाया गया है:

कोई डिवाइस ढूंढें

सबसे पहले, आपके ऐप्लिकेशन को कनेक्ट करने के लिए कोई डिवाइस ढूंढना होगा. BLE डिवाइस ढूंढने के लिए, इनमें से किसी भी एपीआई का इस्तेमाल किया जा सकता है:

बैकग्राउंड में

ऐप्लिकेशन के न दिखने पर, इनमें से किसी भी एपीआई का इस्तेमाल करने पर कोई पाबंदी नहीं है. हालांकि, दोनों एपीआई के लिए आपके ऐप्लिकेशन की प्रोसेस चालू होनी चाहिए. अगर ऐप्लिकेशन प्रोसेस नहीं चल रही है, तो इन तरीकों का इस्तेमाल किया जा सकता है:

  • BluetoothLeScanner के लिए: जब आपके फ़िल्टर से मैच करने वाले किसी डिवाइस को स्कैन किया जाए, तो सूचना पाने के लिए, ScanCallback ऑब्जेक्ट के बजाय PendingIntent ऑब्जेक्ट के साथ startScan() को कॉल करें. सैंपल
  • CompanionDeviceManager के लिए: ऐप्लिकेशन को चालू करने और पहले से जुड़े डिवाइस के रेंज में होने पर उसे चालू रखने के लिए, कंपैनियन ऐप्लिकेशन को चालू रखें में दिए गए निर्देशों का पालन करें. सैंपल

किसी डिवाइस से कनेक्ट करें

डिवाइस ढूंढने के बाद, उससे कनेक्ट करने के लिए आपको इनमें से किसी एक सोर्स से डिवाइस के लिए, BluetoothDevice इंस्टेंस लेना होगा:

BluetoothDevice इंस्टेंस होने के बाद, connectGatt() में से किसी एक तरीके को कॉल करके, उससे जुड़े डिवाइस से कनेक्शन का अनुरोध किया जा सकता है. autoConnect बूलियन में पास की गई वैल्यू से यह तय होता है कि GATT क्लाइंट, इनमें से किस कनेक्शन मोड का इस्तेमाल करता है:

  • डायरेक्ट कनेक्ट (autoconnect = false): सहायक डिवाइस से सीधे कनेक्ट करने की कोशिश करें. अगर डिवाइस उपलब्ध नहीं है, तो कनेक्ट नहीं किया जा सकता. डिसकनेक्ट होने पर, GATT क्लाइंट अपने-आप फिर से कनेक्ट होने की कोशिश नहीं करता.
  • अपने-आप कनेक्ट होने की सुविधा (autoconnect = true): जब भी सहायक डिवाइस उपलब्ध हो, तो उससे अपने-आप कनेक्ट होने की कोशिश करें. अगर सहायक डिवाइस की वजह से कनेक्शन टूट जाता है या सहायक डिवाइस रेंज से बाहर हो जाता है, तो सहायक डिवाइस के उपलब्ध होने पर GATT क्लाइंट अपने-आप फिर से कनेक्ट होने की कोशिश करता है.

बैकग्राउंड में

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

इसलिए, बैकग्राउंड में कनेक्शन बनाने के लिए, ऐप्लिकेशन इन तरीकों का इस्तेमाल कर सकते हैं:

किसी डिवाइस से कनेक्ट रहें

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

दोनों मामलों में, ये विकल्प उपलब्ध हैं:

एक ऐप्लिकेशन से दूसरे ऐप्लिकेशन पर स्विच करते समय

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

सहायक डिवाइसों से जुड़ी सूचनाएं सुनते समय

पेरिफ़ेरल डिवाइसों से जुड़ी सूचनाएं सुनने के लिए, ऐप्लिकेशन को setCharacteristicNotification() को कॉल करना होगा, onCharacteristicChanged() का इस्तेमाल करके कॉलबैक सुनना होगा, और कनेक्शन को चालू रखना होगा. ज़्यादातर ऐप्लिकेशन के लिए, CompanionDeviceService के साथ इस इस्तेमाल के उदाहरण को सपोर्ट करना सबसे सही रहता है. ऐसा इसलिए, क्योंकि ऐप्लिकेशन को लंबे समय तक ऑडियो सुनते रहने की ज़रूरत पड़ सकती है. हालांकि, फ़ोरग्राउंड सेवा का भी इस्तेमाल किया जा सकता है.

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