BDE cihazları bulma

BDE cihazlarını bulmak için startScan() yöntemini kullanırsınız. Bu yöntem, parametre olarak bir ScanCallback değerini alır. Tarama sonuçları bu şekilde döndürülür. Bu nedenle, bu geri çağırma işlemini uygulamanız gerekir. Tarama işlemi yoğun şekilde pil kullandığından aşağıdaki yönergelere uymanız gerekir:

  • İstediğiniz cihazı bulur bulmaz taramayı durdurun.
  • Asla döngü halinde taramayın ve taramanız için her zaman zaman sınırı ayarlayın. Daha önce kullanılabilir olan bir cihaz, kapsama alanı dışına çıkmış ve taramaya devam etmek pili tüketir.

Aşağıdaki örnekte, BDE uygulaması, kullanılabilir Bluetooth LE cihazlarını taramak ve kullanıcılara bunları bir listede göstermek için bir etkinlik (DeviceScanActivity) sağlar. Aşağıdaki snippet'te bir taramanın nasıl başlatılacağı ve durdurulacağı gösterilmektedir:

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

Yalnızca belirli türlerdeki çevre birimlerini taramak için startScan(List<ScanFilter>, ScanSettings, ScanCallback) yöntemini çağırarak taramanın aradığı cihazları kısıtlayan ScanFilter nesnelerinin ve taramayla ilgili parametreleri belirten bir ScanSettings nesnesinin listesini sağlayabilirsiniz.

Aşağıdaki kod örneği, BDE tarama sonuçlarını yayınlamak için kullanılan arayüz olan ScanCallback'in bir uygulamasıdır. Sonuçlar bulunduğunda, kullanıcılara görüntülemek üzere DeviceScanActivity içindeki bir liste bağdaştırıcısına eklenir.

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