Android 在连接到一个可扩展设备时继续扫描其他可扩展设备
我想让我的应用程序连续扫描多达3个不同的BLE外围设备(由MAC地址标识)。当发现一个设备时,我停止扫描并连接到它。代码:Android 在连接到一个可扩展设备时继续扫描其他可扩展设备,android,rx-java,rxandroidble,Android,Rx Java,Rxandroidble,我想让我的应用程序连续扫描多达3个不同的BLE外围设备(由MAC地址标识)。当发现一个设备时,我停止扫描并连接到它。代码: static Observable<ScanResult> bleSharedScanner = MyApplication .getRxBleClient() .scanBleDevices(new ScanSettings.Builder() .setScanMode(SCAN_MODE)
static Observable<ScanResult> bleSharedScanner = MyApplication
.getRxBleClient()
.scanBleDevices(new ScanSettings.Builder()
.setScanMode(SCAN_MODE)
.build())
.share();
static Observable<ScanResult> device1Scanner = bleSharedScanner
.filter(scanResult -> scanResult.getBleDevice().getMacAddress().equalsIgnoreCase( device1MacAddress )
);
静态可观察bleSharedScanner=MyApplication
.getRxBleClient()
.scanBleDevices(新的ScanSettings.Builder()
.setScanMode(扫描模式)
.build())
.share();
静态可观测设备1扫描仪=BLESHAREDSCAN
.filter(scanResult->scanResult.getBleDevice().getMacAddress().equalsIgnoreCase(device1MacAddress)
);
设备2和设备3的代码相同。最初我订阅了所有3个设备扫描仪;当我找到其中一台设备时,我将取消订阅,同时继续扫描其他两台设备
到目前为止,这似乎是我的测试Android手机工作。但我注意到你的回答:“……在尝试连接Android之前停止扫描订阅有时不能很好地同时处理扫描和连接。”
这是一个普遍的问题吗?有好的解决办法吗?在与找到的设备交互时,我需要继续扫描其他设备 我的经验表明,在扫描过程中(我在P8 Lite和P9上确认)使用两个不同的外设连接到外设时,至少有一些华为设备出现问题 扫描过程中,我收到一个
命令,该命令不允许LE\u创建连接
命令。主机和BLE芯片之间的通信从HCI Snoop日志中提取。对我来说,唯一有效的解决办法是在建立连接的一段时间内停止扫描
我们没有任何统计数据来证明这一点——不幸的是。我的经验表明,在扫描过程中(我在P8 Lite和P9上确认)使用两个不同的外设连接到外设时,至少有些华为设备出现问题
扫描过程中,我收到一个命令,该命令不允许LE\u创建连接
命令。主机和BLE芯片之间的通信从HCI Snoop日志中提取。对我来说,唯一有效的解决办法是在建立连接的一段时间内停止扫描
不幸的是,我们没有任何统计数据来证明这一点。正确的方法是简单地连接到每个设备,并将自动连接标志设置为true。然后,您可以有多个连接挂起,并且与扫描时相比,连接尝试从未超时
唯一的问题是,自最近一次蓝牙重启以来,设备必须被绑定或至少被扫描一次,以正确地使堆栈了解设备的地址类型(公共或随机)
无论如何,99%常用的安卓设备都有蓝牙芯片,可以同时扫描和启动。华为P8 lite和便宜的华硕平板电脑是目前为止我发现的唯一不能做到这一点的例外。正确的方法是只需连接到每个设备,并将自动连接标志设置为true。然后,您可以有多个连接挂起,并且与扫描时相比,连接尝试从未超时
唯一的问题是,自最近一次蓝牙重启以来,设备必须被绑定或至少被扫描一次,以正确地使堆栈了解设备的地址类型(公共或随机)
无论如何,99%常用的安卓设备都有蓝牙芯片,可以同时扫描和启动。华为P8Lite和廉价的华硕平板电脑是目前为止我发现的唯一不能做到这一点的例外