Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android BLE setReportDelay()

I'm trying to implement a BLE scan app where i want to list all the devices nearby in a single scan rather than getting one BLE device at a time.

I read from the Android Documentation that i can use setReportDelay() in the Scan Setting Builder to delay the scan results and to use the BatchScanResults() to get a batch/list of devices found.

However when i try to use the setReportDelay() in the Scan Settings builder the scan does not start at all and i get the following error.

04-13 16:03:19.887    8454-8454/com.example.sasnee_lab2.sasbeacon D/BluetoothLeScanner﹕ could not find callback wrapper

Here is my StartScan function with Scan Settings

public void startScan(BluetoothLeScanner scanner)
{
    ScanFilter filter = new ScanFilter.Builder().setDeviceName(null).build();

    ArrayList<ScanFilter> filters = new ArrayList<ScanFilter>();
                    filters.add(filter);

    ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER).setReportDelay(1l)
                                .build();

    Log.i(TAG,"The setting are "+settings.getReportDelayMillis());
    scanner.startScan(filters,settings,BLEScan);


}

And here is the Scan Callback.

  private ScanCallback BLEScan = new ScanCallback() {

        @Override
        public void onBatchScanResults(List<ScanResult> results) {

            Log.i(TAG,"The batch result is "+results.size());
        }

        @Override
        public void onScanResult(int callbackType, ScanResult result) {

            Log.i(TAG,"******************************************");
            Log.i(TAG,"The scan result "+result);
            Log.i(TAG,"------------------------------------------");
        }


        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
        }


        }


    };

Please let me know if i'm doing anything wrong in the implementation here. And thank you.

like image 335
Ashwin Prasad Avatar asked Oct 27 '25 14:10

Ashwin Prasad


1 Answers

You must check whether your hardware supports scan batching through BluetoothAdapter.isOffloadedScanBatchingSupported(). If this returns false then you should not attempt to set a report delay.

like image 67
Doug Koellmer Avatar answered Oct 29 '25 05:10

Doug Koellmer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!