在Android中使用onScanResult获取两个BLE设备

时间:2019-08-28 15:53:05

标签: java android bluetooth-lowenergy

我试图在Android的onScanResult函数中获取两个设备名称和地址,但无法获取这些信息。据我了解,该函数会定期进行调用,直到停止搜索为止,并且该函数会给出有关已创建设备的结果,但我无法同时获得找到的设备数量和设备信息。

这是我的代码:

private ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {

        if("MyBLEdevice".equals(result.getDevice().getName())){
            bleDevice = result.getDevice();
            if(bleScanner !=null){
                bleScanner.stopScan(scanCallback);
            }

        }

        super.onScanResult(callbackType, result);
    }
};

我更改了代码,但无法停止scanResult

boolean isDuplicate = false;
private ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {

        if("MyBLEdevice".equals(result.getDevice().getName())){

            for(BluetoothDevice device : mLeDevices)
            {
                if(device.getAddress().equals(result.getDevice().getAddress())){
                    isDuplicate = true;
                }
                if(!isDuplicate){
                    mLeDevices.add(result.getDevice());
                }
                if(mLeDevices.size()==2)
                {
                    bleScanner.stopScan(scanCallback);
                    bleScanner.flushPendingScanResults(scanCallback);
                }

            }

        }

        super.onScanResult(callbackType, result);
    }
};

1 个答案:

答案 0 :(得分:0)

您将不断获得结果,每个结果仅适用于一台设备,即使在发送新广告后也从同一设备进行扫描。

要获取具有唯一设备的列表,您应该删除重复的设备,更好的选择是在收到该设备的更新时更新列表中已经存在的设备。

您可以使用device.getName()来获得2种特定的设备,请确保您是广告名称,长名称不是通过广告发送的,还是通过以下方式提供服务UUID:

List<ParcelUuid> parcelUuids = result.getScanRecord().getServiceUuids();

并比较您创建的用于广告的UUID。