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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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