Java 在android中使用onScanResult获取两个可扩展设备

Java 在android中使用onScanResult获取两个可扩展设备,java,android,bluetooth-lowenergy,Java,Android,Bluetooth Lowenergy,我试图在Android的onScanResult函数中获取两个设备名称和地址,但无法获取这些信息。据我所知,该函数会定期调用自身,直到停止搜索,并且该函数会给出有关已找到设备的一些结果,但我无法同时获得已找到设备的数量和设备信息 这是我的密码: private ScanCallback scanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResul

我试图在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);
    }
};
我更改了代码,但无法停止扫描结果

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);
    }
};

您不断地获得结果,每个结果仅针对一台设备,甚至在发送新广告后,也会扫描同一台设备

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

您可以使用
device.getName()
获取2个特定设备,确保您是广告名称,长名称不是通过广告发送的,或者服务UUID是通过

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

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

我也尝试了ArrayList,但它对我也不起作用。
演示如何尝试激活ArrayList……mLeDevices.add(result.getDevice());看起来不错。有什么问题吗?大小始终返回1因此我需要在onScanResult之外创建Arraylist,但我找不到正确的位置设备名称和服务相同。由于这个原因,我试图用地址过滤设备。是否可以使用列表筛选地址?信标以外的设备的MAC地址是虚拟的。MAC地址在重新启动敌对应用程序时发生更改,因此尝试通过过滤设备将无法工作。你应该使用设备名称或广告UUID进行过滤,使用Play Store的应用程序检查你的广告是否正确,我使用的是nRF Connect应用程序。它非常好。但是设备名称和服务是相同的。