我需要的是获取我的范围内的每个设备的列表,以便我可以一个接一个地调用它们。
到目前为止,我尝试过使用BluetoothAdapter的startDiscovery()方法,当它返回一个设备列表时,它需要大约12秒才能完成,这对我的任务来说非常重要。
我还设法每2-3秒成功使用LeScanCallback,我确实发现了设备,但在每次扫描时,它一次只返回一个设备。 我正在尝试搜索Beacons,所以这种类型的方法可以返回每个调用一个使用BlutoothLE的其他设备,而不会返回我的Beacon的信息。
那么,有没有办法发现范围内所有设备的列表,而无需等待12秒后startDiscovery()完成?
答案 0 :(得分:1)
几点:
startDiscovery适用于蓝牙经典设备,而非Bluetooth LE。
Android不包含任何特定于解析信标的API,仅用于处理原始蓝牙LE设备。
您可以使用免费和开源Android Beacon Library插件来检测和解析信标。它没有12秒延迟并且包装LeScanCallback方法并结合结果,因此您可以每秒获得回调,如:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
Log.i(TAG, "I see a beacon:"+beacon+" that is "+beacon.getDistance()+" meters away.");
}
}
答案 1 :(得分:0)
你需要拨打BluetoothLeScanner的startScan(ScanCallback) api开始扫描,这支持Android 21(5.0)。
另请参阅下面的问题,它包含可用于启动/停止Le Scanning的示例代码。