العثور على أجهزة BLE

للعثور على أجهزة البلوتوث المنخفض الطاقة، يمكنك استخدام startScan() . تستغرق هذه الطريقة ScanCallback كمَعلمة. يجب تنفيذ عملية الاستدعاء هذه، لأنّ هذه هي الطريقة التي يتم بها عرض نتائج الفحص. نظرًا لأن الفحص يستهلك قدرًا كبيرًا من طاقة البطارية، يجب ملاحظة ما يلي: إرشاداتنا:

  • توقّف عن البحث فور العثور على الجهاز المطلوب.
  • لا تتصفّح أبدًا بشكل متكرر، واضبُط دائمًا حدًا زمنيًا لعملية الفحص. هو جهاز كانت متاحة في السابق ربما تم نقلها خارج النطاق، ولا تزال عملية الفحص جارية يؤدي إلى استنزاف البطارية.

في المثال التالي، يوفر تطبيق BLE نشاطًا (DeviceScanActivity) للبحث عن أجهزة Bluetooth LE المتاحة وعرضها في قائمة للمستخدم. يوضح المقتطف التالي كيفية بدء وإيقاف تشغيل مسح:

Kotlin

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)
    }
}

Java

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 لعرضها في المستخدم.

Kotlin

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()
    }
}

Java

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();
            }
        };