2

I put this permission in manifest file.

<uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

This is a Start scan method. When Screen is on scanning works fine. But when Screen goes to off, scanning stops and resume back when screen is on again. I tried this solution but still facing the same issue.

 void startScan() {
            if (!mScanning) {
                final BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
                final ScanSettings settings = new ScanSettings.Builder()
                        .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(0).setUseHardwareBatchingIfSupported(false).setUseHardwareFilteringIfSupported(false).build();

                ScanFilter.Builder builder = new ScanFilter.Builder();

               builder.setServiceUuid(new ParcelUuid(THINGY_BASE_UUID));
                ScanFilter filter = builder.build();

                final List<ScanFilter> filters = new ArrayList<>();
                filters.add(filter); // Add Filter using UUID
                scanner.startScan(filters, settings, scanCallback);
                mScanning = true;
            }
        }

This is call back method for getting scan result.

 private ScanCallback scanCallback = new ScanCallback() {
        @Override
        public void onScanResult(final int callbackType, final ScanResult result) {
            // do nothing
            Log.e("MainActivity", "onScanResult: " + result.getDevice().getName());
        }

        @Override
        public void onBatchScanResults(final List<ScanResult> results) {
            Log.e("MainActivity", "onBatchScanResults: " + results.size());
        }

        @Override
        public void onScanFailed(final int errorCode) {
            // should never be called
        }

    };
Shree
  • 354
  • 2
  • 21
Joshi Tushar
  • 116
  • 9
  • Possibly relevant: [BLE scan is not working when screen is off on Android 8.1.0](https://stackoverflow.com/questions/48077690/ble-scan-is-not-working-when-screen-is-off-on-android-8-1-0/48079800#48079800). – Markus Kauppinen Jan 05 '18 at 14:26
  • The ScanFilter setup looks good (although I see you are using BluetoothLeScannerCompat not BluetoothLeScanner -- I wonder if that could make any difference?) Can you look at your LogCat output (unfiltered for your app) and see if you see any OS-level messages about the scan when it starts or when the screen goes off? – davidgyoung Jan 05 '18 at 17:36
  • I would certainly try this with the standard Android `BluetoothLeScanner` class rather than the third party `BluetoothLeScannerCompat`. You can get a standard scanner from `bluetoothAdapter.getBluetoothLeScanner()` – davidgyoung Jan 06 '18 at 04:48
  • @davidgyoung BluetoothLeScannerCompat is nordic scanning library. I also tried with BluetoothLeScanner but still face same issue. When screen goes to off there is no any OS-level messages. – Joshi Tushar Jan 08 '18 at 04:39

1 Answers1

0

If you are using nordic scanning library try this:

 private void scan(){
    scanner = BluetoothLeScannerCompat.getScanner();
    ScanSettings settings = new ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(10)
            .setCallbackType(DEFAULT_KEYS_SEARCH_GLOBAL)
            .setUseHardwareBatchingIfSupported(false).build();
    List<ScanFilter> filters = new ArrayList<>();
    scanner.startScan(filters, settings, mScanCallback);
}
Salman Naseem
  • 462
  • 4
  • 17