Android BLE扫描失败\u仅在某些设备上已启动(错误代码1)

Android BLE扫描失败\u仅在某些设备上已启动(错误代码1),android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我正在写一个BLE扫描器,它可以经常扫描外设、连接和断开连接 我正在“循环”扫描-关闭2秒,然后再打开10秒-因为我在某个地方(将尝试查找参考)读到,否则(Android 7.0之后)操作系统将在30分钟左右后停止后台扫描。我也经历过类似的事情 问题是,在某些设备上(例如,摩托罗拉Moto Z和谷歌Pixel),我收到一个错误,表明该应用程序已经开始使用这些参数进行扫描 但是,在我的扫描算法中,我强制在尝试开始扫描之前调用stopScan。下面是一个相关的代码示例,它在提到的设备上产生错误。这只

我正在写一个BLE扫描器,它可以经常扫描外设、连接和断开连接

我正在“循环”扫描-关闭2秒,然后再打开10秒-因为我在某个地方(将尝试查找参考)读到,否则(Android 7.0之后)操作系统将在30分钟左右后停止后台扫描。我也经历过类似的事情

问题是,在某些设备上(例如,摩托罗拉Moto Z和谷歌Pixel),我收到一个错误,表明该应用程序已经开始使用这些参数进行扫描

但是,在我的扫描算法中,我强制在尝试开始扫描之前调用
stopScan
。下面是一个相关的代码示例,它在提到的设备上产生错误。这只是代码的扫描部分

private final int SCANNER_DOWN_TIME = 2000;
private final int SCANNER_LIFETIME_MS = 10000;

private Runnable runnable = new Runnable() {
        private BluetoothLeScanner scanner;

        final ScanSettings.Builder builder = new ScanSettings.Builder();
        final ScanSettings settings = builder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                .build();

        public void run() {
            try {
                bootScanner();
            } catch (Exception e) {
                Sentry.capture(e);
            }
        }

        class StartScannerAndScheduleReboot implements Runnable {
            @Override
            public void run() {
                if (bluetoothAdapter.isEnabled()) {
                    scanner = bluetoothAdapter.getBluetoothLeScanner();
                    if (scanner != null) {
                        scanner.startScan(null, settings, sensorReadingHandler);
                    }
                } else {
                    bluetoothAdapter.enable();
                }

                bootScanHandler = new Handler(Looper.getMainLooper());
                bootScan = new RebootScanner();
                bootScanHandler.postDelayed(bootScan, SCANNER_LIFETIME_MS);
            }
        }

        class RebootScanner implements Runnable {
            @Override
            public void run() {
                bootScanner();
            }
        }

        private void bootScanner() {
            try {
                scanner.stopScan(sensorReadingHandler);
            } catch (Exception e) {
                /* We can ignore this - there are cases that this will happen & it's ok */
            }

            startScanHandler = new Handler(Looper.getMainLooper());
            startScan = new StartScannerAndScheduleReboot();
            startScanHandler.postDelayed(startScan, SCANNER_DOWN_TIME);
        }

        private ScanCallback sensorReadingHandler = new ScanCallback() 

{ /* I don't believe the scanCallback code is relevant, as this happens before any connections are even attempted. */ }

        };

不足为奇的是,该应用程序仍然能够读取可传输的数据,但有些数据被删除了。这让我相信我不应该忽略这个错误。

你找到解决方案了吗?