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

कोई डिवाइस ढूंढें
सबसे पहले, आपके ऐप्लिकेशन को कनेक्ट करने के लिए कोई डिवाइस ढूंढना होगा. BLE डिवाइस ढूंढने के लिए, इनमें से किसी भी एपीआई का इस्तेमाल किया जा सकता है:
BluetoothLeScanner, जैसा कि Find BLE devices में बताया गया है. सैंपलCompanionDeviceManagerजैसा कि कंपैनियन डिवाइस को जोड़ने के बारे में बताया गया है. सैंपल
बैकग्राउंड में
ऐप्लिकेशन के न दिखने पर, इनमें से किसी भी एपीआई का इस्तेमाल करने पर कोई पाबंदी नहीं है. हालांकि, दोनों एपीआई के लिए आपके ऐप्लिकेशन की प्रोसेस चालू होनी चाहिए. अगर ऐप्लिकेशन प्रोसेस नहीं चल रही है, तो इन तरीकों का इस्तेमाल किया जा सकता है:
BluetoothLeScannerके लिए: जब आपके फ़िल्टर से मैच करने वाले किसी डिवाइस को स्कैन किया जाए, तो सूचना पाने के लिए,ScanCallbackऑब्जेक्ट के बजायPendingIntentऑब्जेक्ट के साथstartScan()को कॉल करें. सैंपलCompanionDeviceManagerके लिए: ऐप्लिकेशन को चालू करने और पहले से जुड़े डिवाइस के रेंज में होने पर उसे चालू रखने के लिए, कंपैनियन ऐप्लिकेशन को चालू रखें में दिए गए निर्देशों का पालन करें. सैंपल
किसी डिवाइस से कनेक्ट करें
डिवाइस ढूंढने के बाद, उससे कनेक्ट करने के लिए आपको इनमें से किसी एक सोर्स से डिवाइस के लिए, BluetoothDevice इंस्टेंस लेना होगा:
BluetoothLeScannerस्कैन का नतीजा, जैसा कि पिछले सेक्शन में बताया गया है.- बॉन्ड किए गए डिवाइसों की सूची,
BluetoothAdapter.getBondedDevices()से ली गई. BluetoothAdapterकी कैश मेमोरी,BluetoothAdapter.getRemoteLeDevice()का इस्तेमाल कर रही है.
BluetoothDevice इंस्टेंस होने के बाद, connectGatt() में से किसी एक तरीके को कॉल करके, उससे जुड़े डिवाइस से कनेक्शन का अनुरोध किया जा सकता है. autoConnect बूलियन में पास की गई वैल्यू से यह तय होता है कि GATT क्लाइंट, इनमें से किस कनेक्शन मोड का इस्तेमाल करता है:
- डायरेक्ट कनेक्ट (
autoconnect = false): सहायक डिवाइस से सीधे कनेक्ट करने की कोशिश करें. अगर डिवाइस उपलब्ध नहीं है, तो कनेक्ट नहीं किया जा सकता. डिसकनेक्ट होने पर, GATT क्लाइंट अपने-आप फिर से कनेक्ट होने की कोशिश नहीं करता. - अपने-आप कनेक्ट होने की सुविधा (
autoconnect = true): जब भी सहायक डिवाइस उपलब्ध हो, तो उससे अपने-आप कनेक्ट होने की कोशिश करें. अगर सहायक डिवाइस की वजह से कनेक्शन टूट जाता है या सहायक डिवाइस रेंज से बाहर हो जाता है, तो सहायक डिवाइस के उपलब्ध होने पर GATT क्लाइंट अपने-आप फिर से कनेक्ट होने की कोशिश करता है.
बैकग्राउंड में
ऐप्लिकेशन के बैकग्राउंड में होने पर, किसी डिवाइस से कनेक्ट करने पर कोई पाबंदी नहीं है. हालांकि, प्रोसेस बंद होने पर कनेक्शन बंद हो जाता है. इसके अलावा, Android 10 और इसके बाद के वर्शन में, बैकग्राउंड से गतिविधियां शुरू करने या Android 12 और इसके बाद के वर्शन में, फ़ोरग्राउंड सेवाएं शुरू करने पर पाबंदियां हैं.
इसलिए, बैकग्राउंड में कनेक्शन बनाने के लिए, ऐप्लिकेशन इन तरीकों का इस्तेमाल कर सकते हैं:
- अपने डिवाइस से कनेक्ट करने के लिए, WorkManager का इस्तेमाल करें.
- कोई तय कार्रवाई करने के लिए,
PeriodicWorkRequestयाOneTimeWorkRequestसेट किया जा सकता है. हालांकि, ऐप्लिकेशन पर पाबंदियां लागू हो सकती हैं. - इसके अलावा, WorkManager की सुविधाओं का फ़ायदा भी लिया जा सकता है. जैसे, काम से जुड़ी पाबंदियां, हाई-प्रायाॅरिटी वाला काम, फिर से कोशिश करने की नीति वगैरह.
- अगर किसी टास्क को पूरा करने के लिए, कनेक्शन को ज़्यादा से ज़्यादा समय तक चालू रखना ज़रूरी है, जैसे कि डेटा सिंक करना या सहायक डिवाइसों से पोलिंग करना, तो आपको फ़ोरग्राउंड सेवा शुरू करनी होगी. इसके लिए, लंबे समय तक चलने वाले वर्कर के लिए सहायता में दिए गए दिशा-निर्देशों का पालन करें. हालांकि, Android 12 से फ़ोरग्राउंड सर्विस के लॉन्च से जुड़ी पाबंदियां लागू होती हैं.
- कोई तय कार्रवाई करने के लिए,
connectedDeviceटाइप वाली फ़ोरग्राउंड सेवा शुरू करें.- अगर किसी टास्क को पूरा करने के लिए, कनेक्शन को ज़्यादा से ज़्यादा समय तक चालू रखना ज़रूरी है, जैसे कि डेटा सिंक करना या सहायक डिवाइसों से पोलिंग करना, तो आपको फ़ोरग्राउंड सेवा शुरू करनी होगी. इसके लिए, लंबे समय तक चलने वाले वर्कर के लिए सहायता में दिए गए दिशा-निर्देशों का पालन करें. हालांकि, Android 12 से फ़ोरग्राउंड सर्विस के लॉन्च से जुड़ी पाबंदियां लागू होती हैं.
- डिवाइस मौजूद होने पर, अपनी प्रोसेस को चालू करने के लिए,
PendingIntentऑब्जेक्ट के साथstartScan()को कॉल करें. इसके बारे में डिवाइस ढूंढें में बताया गया है. पेरिफ़ेरल डिवाइस को विज्ञापन दिखाना चाहिए.- हमारा सुझाव है कि आप एक वर्कर और एक जॉब शुरू करें. सिस्टम की वजह से, इसमें रुकावट आ सकती है. इसलिए, इसका इस्तेमाल सिर्फ़ कम समय के लिए किया जा सकता है.
- Android 12 से पहले के वर्शन में,
PendingIntentऑब्जेक्ट से सीधे फ़ोरग्राउंड सेवा शुरू की जा सकती है.
- बैकग्राउंड में सेवा शुरू करने के लिए,
CompanionDeviceServiceऔरREQUEST_COMPANION_RUN_IN_BACKGROUNDयाREQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDमें से किसी एक अनुमति का इस्तेमाल करें.
किसी डिवाइस से कनेक्ट रहें
ऐप्लिकेशन को सहायक डिवाइसों से सिर्फ़ तब तक कनेक्ट रहना चाहिए, जब तक ज़रूरी हो. टास्क पूरा होने के बाद, उन्हें डिसकनेक्ट कर देना चाहिए. हालांकि, ऐसे दो मामले हैं जिनमें किसी ऐप्लिकेशन को हमेशा के लिए कनेक्शन बनाए रखने की ज़रूरत पड़ सकती है:
दोनों मामलों में, ये विकल्प उपलब्ध हैं:
CompanionDeviceServiceका इस्तेमाल,REQUEST_COMPANION_RUN_IN_BACKGROUNDअनुमति औरCompanionDeviceManager.startObservingDevicePresence()तरीके के साथ करें.- जब ऐप्लिकेशन फ़ोरग्राउंड में हो (या छूट के दायरे में हो), तब
connectedDeviceफ़ोरग्राउंड टाइप के साथ फ़ोरग्राउंड सेवा शुरू करें.
एक ऐप्लिकेशन से दूसरे ऐप्लिकेशन पर स्विच करते समय
किसी डिवाइस को ढूंढने, उससे कनेक्ट करने, और डेटा ट्रांसफ़र करने में समय लगता है. साथ ही, इसके लिए ज़्यादा संसाधनों की ज़रूरत होती है. जब उपयोगकर्ता एक ऐप्लिकेशन से दूसरे ऐप्लिकेशन पर स्विच करता है या एक साथ कई काम करता है, तो कनेक्शन टूट सकता है. ऐसे में, उसे पूरी प्रोसेस फिर से करनी पड़ सकती है. इससे बचने के लिए, आपको प्रोसेस पूरी होने तक कनेक्शन को चालू रखना चाहिए. connectedDevice टाइप वाली फ़ोरग्राउंड सेवा या कंपैनियन डिवाइस की मौजूदगी वाला एपीआई इस्तेमाल किया जा सकता है.
सहायक डिवाइसों से जुड़ी सूचनाएं सुनते समय
पेरिफ़ेरल डिवाइसों से जुड़ी सूचनाएं सुनने के लिए, ऐप्लिकेशन को
setCharacteristicNotification() को कॉल करना होगा,
onCharacteristicChanged() का इस्तेमाल करके कॉलबैक सुनना होगा,
और कनेक्शन को चालू रखना होगा. ज़्यादातर ऐप्लिकेशन के लिए, CompanionDeviceService के साथ इस इस्तेमाल के उदाहरण को सपोर्ट करना सबसे सही रहता है. ऐसा इसलिए, क्योंकि ऐप्लिकेशन को लंबे समय तक ऑडियो सुनते रहने की ज़रूरत पड़ सकती है. हालांकि, फ़ोरग्राउंड सेवा का भी इस्तेमाल किया जा सकता है.
दोनों ही मामलों में, प्रोसेस खत्म होने के बाद, किसी डिवाइस से कनेक्ट करें सेक्शन में दिए गए निर्देशों का पालन करके, फिर से कनेक्ट किया जा सकता है.