BLE डिवाइस ढूंढें

BLE डिवाइसों को ढूंढने के लिए, startScan() तरीका. इस तरीके से पैरामीटर के तौर पर ScanCallback. आपको इस कॉलबैक को लागू करना होगा, क्योंकि ऐसा करने से स्कैन के नतीजे दिखते हैं. स्कैन करने में बैटरी ज़्यादा खर्च होती है, इसलिए आपको इन बातों का ध्यान रखना चाहिए: दिशा-निर्देश:

  • अपनी पसंद का डिवाइस मिलते ही, स्कैन करना बंद कर दें.
  • कभी भी लूप पर स्कैन न करें. साथ ही, स्कैन करने के लिए हमेशा एक समयसीमा सेट करें. ऐसा डिवाइस जो पहले उपलब्ध था, शायद सीमा से बाहर चला गया हो और स्कैन जारी रहा हो बैटरी को खत्म करता है.

यहां दिए गए उदाहरण में, BLE ऐप्लिकेशन एक गतिविधि देता है (DeviceScanActivity) उपलब्ध ब्लूटूथ LE डिवाइसों को स्कैन करने और डिसप्ले के लिए उपयोगकर्ता के लिए उन्हें सूची में जोड़ा जा सकता है. नीचे दिए गए स्निपेट में बताया गया है कि स्कैन:

KotlinJava
private val bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
private var scanning = false
private val handler = Handler()

// Stops scanning after 10 seconds.
private val SCAN_PERIOD: Long = 10000

private fun scanLeDevice() {
    if (!scanning) { // Stops scanning after a pre-defined scan period.
        handler.postDelayed({
            scanning = false
            bluetoothLeScanner.stopScan(leScanCallback)
        }, SCAN_PERIOD)
        scanning = true
        bluetoothLeScanner.startScan(leScanCallback)
    } else {
        scanning = false
        bluetoothLeScanner.stopScan(leScanCallback)
    }
}
private BluetoothLeScanner bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
private boolean scanning;
private Handler handler = new Handler();

// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;

private void scanLeDevice() {
    if (!scanning) {
        // Stops scanning after a predefined scan period.
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                scanning = false;
                bluetoothLeScanner.stopScan(leScanCallback);
            }
        }, SCAN_PERIOD);

        scanning = true;
        bluetoothLeScanner.startScan(leScanCallback);
    } else {
        scanning = false;
        bluetoothLeScanner.stopScan(leScanCallback);
    }
}

सिर्फ़ खास तरह के सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) को स्कैन करने के लिए, startScan(List<ScanFilter>, ScanSettings, ScanCallback) ScanFilter की सूची दे रहे हैं वे ऑब्जेक्ट जो उन डिवाइसों पर पाबंदी लगाते हैं जिन्हें स्कैन करने की ज़रूरत होती है. साथ ही, ScanSettings ऑब्जेक्ट है जो स्कैन के बारे में पैरामीटर तय करता है.

नीचे दिया गया कोड सैंपल, ScanCallback यह BLE स्कैन के नतीजे देने के लिए इस्तेमाल किया गया इंटरफ़ेस है. नतीजे मिलने पर, उन्हें DeviceScanActivity में लिस्ट अडैप्टर में जोड़ा जाता है, ताकि उपयोगकर्ता.

KotlinJava
private val leDeviceListAdapter = LeDeviceListAdapter()
// Device scan callback.
private val leScanCallback: ScanCallback = object : ScanCallback() {
    override fun onScanResult(callbackType: Int, result: ScanResult) {
        super.onScanResult(callbackType, result)
        leDeviceListAdapter.addDevice(result.device)
        leDeviceListAdapter.notifyDataSetChanged()
    }
}
private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter();

// Device scan callback.
private ScanCallback leScanCallback =
        new ScanCallback() {
            @Override
            public void onScanResult(int callbackType, ScanResult result) {
                super.onScanResult(callbackType, result);
                leDeviceListAdapter.addDevice(result.getDevice());
                leDeviceListAdapter.notifyDataSetChanged();
            }
        };