BluetoothAdapter不会停止扫描BLE设备

use*_*879 9 android bluetooth-lowenergy android-bluetooth

在我的应用程序中我有启动和停止按钮,当用户按下启动时我调用startScan方法

bluetoothAdapter.getBluetoothLeScanner().startScan(getLeScanCallback());
Run Code Online (Sandbox Code Playgroud)

当用户按下停止时,我会调用stopScan,但它似乎什么也没做.BluetoothAdapter会持续扫描新设备.

bluetoothAdapter.getBluetoothLeScanner().stopScan(getLeScanCallback());
Run Code Online (Sandbox Code Playgroud)

这是我的getLeScanCallback方法:

private ScanCallback getLeScanCallback(){
    ScanCallback leScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            boolean duplicate = false;
            for(Device d : devices) {
                if(d.getAddress().equals(result.getDevice().getAddress()))
                    duplicate = true;
            }
            if(!duplicate) {
                Device device = new Device();
                device.setName(result.getDevice().getName());
                device.setAddress(result.getDevice().getAddress());
                device.setStatus(getString(R.string.disconnected));
                devices.add(device);
                deviceListAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }

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

    return leScanCallback;
}
Run Code Online (Sandbox Code Playgroud)

即使在调用stopScan()之后它也会被调用.我做错了什么,换句话说,如何停止扫描BLE设备?

Rad*_*ekJ 17

每次打电话给getLeScanCallback你时,都会创建新实例ScanCallback并丢失对前一个实例的引用.

stopScan 停止正在进行的扫描,无论你传递的是什么实例但是如果它是一个不同的实例(比你曾经开始的实例),它将不会删除旧的回调实例,因此在停止之前仍会传递一些事件.


spe*_*ary 5

扫描结果不会立即停止,但最终会停止。您可以使用以下方法刷新待处理的结果队列:

scanner.flushPendingScanResults();

但是即使那样,文档也很清楚,它将把找到的所有内容发送给回调。即使您已停止扫描,也会发生这种情况。API设计不佳,但这就是事实。

我认为最简单的方法是设置一个标志,以在停止扫描结果后忽略它们。

  • 很高兴知道这一点。当您说“文档很清楚......”时,您能给我们指出相关文档吗?谢谢 (2认同)