public void startScan(final UUID filterUuid) {
        mFilterUuid = filterUuid;

        if (mScannerStateLiveData.isScanning()) {
            return;
        }

        mScannerStateLiveData.scanningStarted();
        //Scanning settings
        final ScanSettings settings = new ScanSettings.Builder()
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                // Refresh the devices list every second
                .setReportDelay(0)
                // Hardware filtering has some issues on selected devices
                .setUseHardwareFilteringIfSupported(false)
                // Samsung S6 and S6 Edge report equal value of RSSI for all devices. In this app we ignore the RSSI.
                /*.setUseHardwareBatchingIfSupported(false)*/
                .build();

        //Let's use the filter to scan only for unprovisioned mesh nodes.
        final List<ScanFilter> filters = new ArrayList<>();
        filters.add(new ScanFilter.Builder().setServiceUuid(new ParcelUuid((filterUuid))).build());

        final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
        scanner.startScan(filters, settings, mScanCallbacks);
    }
Start scanning for Bluetooth devices.

@param filterUuid UUID to filter scan results with
app/src/main/java/no/nordicsemi/android/nrfmesh/viewmodels/ScannerRepository.java