gpt4 book ai didi

android - BluetoothAdapter 不会停止扫描 BLE 设备

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:22 25 4
gpt4 key购买 nike

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

bluetoothAdapter.getBluetoothLeScanner().startScan(getLeScanCallback());

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

bluetoothAdapter.getBluetoothLeScanner().stopScan(getLeScanCallback());

这是我的 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;
}

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

最佳答案

每次调用 getLeScanCallback 时,您都会创建 ScanCallback 的新实例并丢失对先前实例的引用。

stopScan 停止正在进行的扫描,无论您传递什么实例,但如果它是一个不同的实例(与您用来启动的实例不同),它不会删除旧的回调实例,因此仍会传递一些事件在它停止之前。

关于android - BluetoothAdapter 不会停止扫描 BLE 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41955768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com