मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

किसी Bluetooth डिवाइस (BLE) को कैसे स्कैन करें और उससे कनेक्ट करें

उद्देश्य। आस-पास के Bluetooth डिवाइस खोजना, उनमें से किसी एक से कनेक्ट करना और डेटा का आदान-प्रदान करना — stream (Classic/SPP) के माध्यम से या GATT विशेषताओं (BLE: पढ़ना, लिखना, सूचनाएँ प्राप्त करना) के माध्यम से।

⚠️ ईमानदारी का नोट (उपयोग करने से पहले पढ़ें)

core मॉड्यूल में, BLE परत इन-मेमोरी कैश के ऊपर एक कंकाल है, असली रेडियो नहीं:

  • GattCharacteristic.read() कैश में मौजूद मान (CompletableFuture.completedFuture(value)) लौटाता है, हार्डवेयर से पढ़ा गया मान नहीं।
  • GattCharacteristic.write(byte[]) केवल मान को स्थानीय रूप से संग्रहीत करता है।
  • enableNotifications(...) listener को पंजीकृत करता है, लेकिन डेटा को ट्रिगर करने वाला notifyValueChanged(...) है।
  • BluetoothDevice.discoverServices(...) core में खाली सूची लौटाता है।

असली रेडियो (वास्तविक scan/कनेक्शन/GATT) प्लेटफ़ॉर्म launchers (Android/iOS) द्वारा प्रदान किया जाता है। नीचे दिए गए कोड को सार्वजनिक API के रूप में लें; वास्तविक व्यवहार उस launcher पर निर्भर करता है जिसमें एप्लिकेशन चलता है।

उपयोग की गई APIs

  • BluetoothManager.getInstance() throws IOException — singleton।
  • scanForDevices(long duration, TimeUnit unit, ScanCallback cb) — अतुल्यकालिक खोज; ScanCallback.onSuccess(List<BluetoothDevice>) / onError(String)।
  • connect(BluetoothDevice device, ConnectionCallback cb) — अतुल्यकालिक कनेक्शन; ConnectionCallback.onSuccess(BluetoothConnection) / onError(String)।
  • BluetoothConnection (AutoCloseable) — read() / read(int max) → byte[]; write(byte[]) / write(String) → int।
  • GATT: GattCharacteristic.read() → CompletableFuture<byte[]>; write(byte[]) → CompletableFuture<Void>; enableNotifications(Consumer<byte[]>) → CompletableFuture<Void>।
  • BluetoothManager.isBluetoothEnabled(), getPairedDevices(...), getLocalDevice()।

पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)

ऊपर दिए गए ईमानदारी के नोट को याद रखें: core मॉड्यूल में BLE परत इन-मेमोरी कैश के ऊपर एक कंकाल है — असली रेडियो प्लेटफ़ॉर्म launchers (Android/iOS) से आता है। नीचे दिया गया उदाहरण सार्वजनिक API है; वास्तविक व्यवहार उस launcher पर निर्भर करता है जिसमें एप्लिकेशन चलता है।

package com.exemplo;

import java.util.concurrent.*;              // TimeUnit
import dev.crossfly.ui.*;                   // Window, Component, Button, Label
import dev.crossfly.ui.layout.*;            // VerticalLayout
import dev.crossfly.device.bluetooth.*;     // BluetoothManager, BluetoothDevice

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      Button acao = new Button("Escanear Bluetooth");
      acao.onAction(c ->
      {
         try
         {
            BluetoothManager bt = BluetoothManager.getInstance();

            // स्कैन करें (callbacks paint thread के बाहर → UI को छूने पर onUI)
            bt.scanForDevices(10, TimeUnit.SECONDS, new BluetoothManager.ScanCallback()
            {
               public void onSuccess(java.util.List<BluetoothDevice> devices)
               {
                  Component.onUI(() -> resultado.setText("Encontrados: " + devices.size()));
               }
               public void onError(String error)
               {
                  Component.onUI(() -> resultado.setText("Erro: " + error));
               }
            });
         }
         catch (java.io.IOException e)
         {
            resultado.setText("Bluetooth indisponível");   // Bluetooth सिस्टम अनुपलब्ध
         }
      });
      add(LAY_AUTO, acao);
   }
}

नीचे का अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए MainWindow ढाँचे में रखें।

न्यूनतम अंश

// स्रोत में सत्यापित: BluetoothManager.java (getInstance, scanForDevices, connect); BluetoothConnection.java (read/write); GattCharacteristic.java (read/write/enableNotifications)
import java.util.concurrent.*;             // TimeUnit
import dev.crossfly.device.bluetooth.*;    // BluetoothManager, BluetoothDevice, BluetoothConnection, GattCharacteristic
import dev.crossfly.ui.*;                  // Component (onUI)

try {
   BluetoothManager bt = BluetoothManager.getInstance();

   // 1) स्कैन करें (callbacks paint thread के बाहर → UI को छूने पर onUI)
   bt.scanForDevices(10, TimeUnit.SECONDS, new BluetoothManager.ScanCallback() {
      public void onSuccess(java.util.List<BluetoothDevice> devices) {
         Component.onUI(() -> listarDispositivos(devices));
      }
      public void onError(String error) {
         Component.onUI(() -> mostrarErro(error));
      }
   });

   // 2) कनेक्ट करें और stream के ज़रिए डेटा का आदान-प्रदान करें (Classic/SPP)
   BluetoothDevice alvo = /* उपयोगकर्ता द्वारा चुना गया */;
   bt.connect(alvo, new BluetoothManager.ConnectionCallback() {
      public void onSuccess(BluetoothConnection conn) {
         try (conn) {                        // AutoCloseable
            conn.write("PING".getBytes());
            byte[] resposta = conn.read();    // 4096 bytes तक
         } catch (java.io.IOException e) { /* संभालें */ }
      }
      public void onError(String error) {
         Component.onUI(() -> mostrarErro(error));
      }
   });

   // 3) BLE / GATT — किसी characteristic की सूचनाओं को पढ़ें और subscribe करें
   GattCharacteristic ch = /* device की service से प्राप्त */;
   ch.enableNotifications(data ->
      Component.onUI(() -> atualizarValor(data)));   // Consumer<byte[]>
   ch.read().thenAccept(valor ->
      Component.onUI(() -> mostrarValor(valor)));     // CompletableFuture<byte[]>
} catch (java.io.IOException e) {
   // Bluetooth सिस्टम अनुपलब्ध
}

और गहराई में जाएँ

क्या यह पृष्ठ उपयोगी था?