ब्लूटूथ डिवाइस ढूंढें

BluetoothAdapter का इस्तेमाल करके, आपको या तो डिवाइस के खोज नतीजों से या इसके ज़रिए रिमोट ब्लूटूथ डिवाइस मिल सकते हैं जोड़े गए डिवाइसों की सूची पूछ रही हूँ.

पक्का करें कि आपके पास ब्लूटूथ इस्तेमाल करने की ज़रूरी अनुमतियां हों और ब्लूटूथ के लिए अपना ऐप्लिकेशन सेट अप करें को ढूंढने का प्रयास करता है.

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

खोजे जाने लायक डिवाइस, उपयोगकर्ता की जगह की जानकारी के बारे में बता सकते हैं, इसलिए डिवाइस खोजने की प्रोसेस के लिए, जगह की जानकारी का ऐक्सेस ज़रूरी है. अगर आपके ऐप्लिकेशन का इस्तेमाल किया जा रहा है, तो अगर आपको Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन वाले डिवाइस पर, कंपैनियन डिवाइस मैनेजर API का इस्तेमाल करें. यह एपीआई यह आपके ऐप्लिकेशन की ओर से डिवाइस का पता लगाता है. इससे आपके ऐप्लिकेशन को जगह की जानकारी की अनुमतियों का अनुरोध करना होगा.

रिमोट डिवाइस से पहली बार कनेक्शन बनाने के बाद, उपयोगकर्ता को अनुरोध अपने-आप दिखने लगता है. जब कोई डिवाइस किसी दूसरे डिवाइस से जोड़ा जाता है, तो उस डिवाइस के बारे में बुनियादी जानकारी—जैसे डिवाइस का नाम, क्लास, और MAC पता—सेव हो जाता है और ब्लूटूथ एपीआई का इस्तेमाल करके इसे पढ़ा जा सकता है. ज्ञात MAC का उपयोग करना पता होता है, तो किसी भी समय इसके साथ कनेक्शन शुरू किया जा सकता है यह नहीं मान सकते कि डिवाइस अब भी रेंज में है.

ध्यान दें कि पेयर किए जाने और कनेक्ट होने के बीच फ़र्क़ होता है:

  • जुड़े हुए का मतलब है कि दो डिवाइस एक-दूसरे के मौजूद हैं, के पास एक शेयर की हुई लिंक-कुंजी हो, जिसका इस्तेमाल पुष्टि करने के लिए किया जा सके. साथ ही, एक-दूसरे के साथ एन्क्रिप्ट (सुरक्षित) किया गया कनेक्शन बनाना.
  • कनेक्ट होने का मतलब है कि डिवाइस फ़िलहाल एक आरएफ़सीओएमएम चैनल शेयर करते हैं और एक-दूसरे के साथ डेटा ट्रांसमिट कर सकते हैं. मौजूदा ब्लूटूथ आरएफ़सीओएमएम कनेक्शन के इस्तेमाल से पहले, एपीआई के लिए डिवाइसों को जोड़ना ज़रूरी है स्थापित किया गया. एन्क्रिप्ट (सुरक्षित) किए गए किसी डिवाइस को खोलने पर, डिवाइस अपने-आप डिवाइस से जुड़ जाता है ब्लूटूथ API के साथ कनेक्शन कनेक्ट करता है.

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

जोड़े गए डिवाइसों के लिए क्वेरी करें

डिवाइस खोजने से पहले, जोड़े गए डिवाइस के सेट के बारे में क्वेरी करना ज़रूरी है ताकि यह देखा जा सके कि मनचाहे डिवाइस के बारे में पहले से जानकारी मौजूद है या नहीं. ऐसा करने के लिए, कॉल करें getBondedDevices(). यह BluetoothDevice ऑब्जेक्ट जोड़े गए डिवाइसों का प्रतिनिधित्व करता है. उदाहरण के लिए, जोड़े गए सभी डिवाइसों के लिए क्वेरी की जा सकती है और नीचे दिए गए कोड स्निपेट के तौर पर, हर डिवाइस का नाम और MAC पता पाएं दिखाता है:

Kotlin

val pairedDevices: Set<BluetoothDevice>? = bluetoothAdapter?.bondedDevices
pairedDevices?.forEach { device ->
   val deviceName = device.name
   val deviceHardwareAddress = device.address // MAC address
}

Java

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();

if (pairedDevices.size() > 0) {
   // There are paired devices. Get the name and address of each paired device.
   for (BluetoothDevice device : pairedDevices) {
       String deviceName = device.getName();
       String deviceHardwareAddress = device.getAddress(); // MAC address
   }
}

किसी ब्लूटूथ डिवाइस से कनेक्शन शुरू करने के लिए, सिर्फ़ वे सब कुछ जिसकी ज़रूरत होती है जुड़ा हुआ BluetoothDevice ऑब्जेक्ट, MAC पता है. इसे, इसके ज़रिए वापस लाया जाता है कॉल किया जा रहा है getAddress(). आपने लोगों तक पहुंचाया मुफ़्त में ब्लूटूथ कनेक्ट करें में जाकर, कनेक्शन बनाने के बारे में ज़्यादा जान सकता है डिवाइस में बदल सकते हैं.

अलग-अलग डिवाइसों के बारे में जानें

डिवाइसों को खोजने के लिए, इस नंबर पर कॉल करें startDiscovery(). यह प्रोसेस एसिंक्रोनस होती है और बूलियन वैल्यू दिखाती है, जो बताती है कि खोज सफलतापूर्वक शुरू हो गई है. खोज प्रक्रिया में आम तौर पर करीब 12 सेकंड का पूछताछ स्कैन और इसके बाद मिले हर डिवाइस का पेज स्कैन किया गया का उपयोग कर सकते हैं.

खोजे गए हर डिवाइस के बारे में जानकारी पाने के लिए, आपके ऐप्लिकेशन को BroadcastReceiver के लिए ACTION_FOUND इंटेंट. सिस्टम इस इंटेंट को हर डिवाइस के लिए ब्रॉडकास्ट करता है. इंटेंट में यह शामिल है अतिरिक्त फ़ील्ड EXTRA_DEVICE और EXTRA_CLASS, जो तो एक BluetoothDevice और एक BluetoothClass. नीचे दिया गया कोड स्निपेट बताता है कि ब्रॉडकास्ट को मैनेज करने के लिए कैसे रजिस्टर किया जा सकता है डिवाइसों के पता चलने पर:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
   ...

   // Register for broadcasts when a device is discovered.
   val filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
   registerReceiver(receiver, filter)
}

// Create a BroadcastReceiver for ACTION_FOUND.
private val receiver = object : BroadcastReceiver() {

   override fun onReceive(context: Context, intent: Intent) {
       val action: String = intent.action
       when(action) {
           BluetoothDevice.ACTION_FOUND -> {
               // Discovery has found a device. Get the BluetoothDevice
               // object and its info from the Intent.
               val device: BluetoothDevice =
                       intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
               val deviceName = device.name
               val deviceHardwareAddress = device.address // MAC address
           }
       }
   }
}

override fun onDestroy() {
   super.onDestroy()
   ...

   // Don't forget to unregister the ACTION_FOUND receiver.
   unregisterReceiver(receiver)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
   ...

   // Register for broadcasts when a device is discovered.
   IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
   registerReceiver(receiver, filter);
}

// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver receiver = new BroadcastReceiver() {
   public void onReceive(Context context, Intent intent) {
       String action = intent.getAction();
       if (BluetoothDevice.ACTION_FOUND.equals(action)) {
           // Discovery has found a device. Get the BluetoothDevice
           // object and its info from the Intent.
           BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
           String deviceName = device.getName();
           String deviceHardwareAddress = device.getAddress(); // MAC address
       }
   }
};

@Override
protected void onDestroy() {
   super.onDestroy();
   ...

   // Don't forget to unregister the ACTION_FOUND receiver.
   unregisterReceiver(receiver);
}

किसी ब्लूटूथ डिवाइस से कनेक्ट करने के लिए, इस लिंक पर getAddress() को कॉल करें: जोड़े गए MAC पते को वापस पाने के लिए, BluetoothDevice.

खोजे जाने लायक सुविधा चालू करें

स्थानीय डिवाइस को अन्य डिवाइस से खोजने लायक बनाने के लिए, कॉल करें startActivityForResult(Intent, int) के साथ ACTION_REQUEST_DISCOVERABLE इंटेंट. इससे एक अनुरोध भेजा जाता है, जिसमें बिना अनुमति के सिस्टम का खोज मोड चालू करने का अनुरोध किया जाता है आपको सेटिंग ऐप्लिकेशन पर जाना होगा, जिससे आपका खुद का ऐप्लिकेशन बंद हो जाएगा. इन्होंने बदलाव किया है डिफ़ॉल्ट रूप से, डिवाइस दो मिनट तक खोजे जाने लायक हो जाता है. आप एक घंटे तक EXTRA_DISCOVERABLE_DURATION अतिरिक्त.

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

Kotlin

val requestCode = 1;
val discoverableIntent: Intent = Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE).apply {
   putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300)
}
startActivityForResult(discoverableIntent, requestCode)

Java

int requestCode = 1;
Intent discoverableIntent =
       new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivityForResult(discoverableIntent, requestCode);


दूसरी इमेज: खोजने लायक बनाने की सुविधा देने वाला डायलॉग बॉक्स.

एक डायलॉग बॉक्स दिखेगा, जिसमें उपयोगकर्ता से इस डिवाइस को ऐक्सेस करने की अनुमति मांगी जाएगी जैसा कि दूसरी इमेज में दिखाया गया है. अगर उपयोगकर्ता "अनुमति दें" का जवाब देता है, तो इसके बाद डिवाइस तय समय तक खोजे जाने लायक हो जाता है. इसके बाद की आपकी गतिविधि एक कॉल आता है onActivityResult() कॉलबैक करें, जिसके नतीजे का कोड डिवाइस के कुल समय के बराबर होता है खोजने लायक. अगर उपयोगकर्ता ने "अस्वीकार करें" जवाब दिया है, या कोई गड़बड़ी हुई है, तो नतीजा कोड RESULT_CANCELED है.

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

SCAN_MODE_CONNECTABLE_DISCOVERABLE
डिवाइस पर खोज करने की सुविधा चालू है.
SCAN_MODE_CONNECTABLE
डिवाइस खोजे जाने लायक मोड में नहीं है, लेकिन वह अब भी कनेक्शन पा सकता है.
SCAN_MODE_NONE
डिवाइस खोजने लायक मोड में नहीं है और कनेक्शन नहीं मिल सकता.

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