我需要获取我范围内所有设备的列表,以便可以依次调用它们上的某个方法。
到目前为止,我一直在尝试使用BluetoothAdapter的startDiscovery()方法,当它返回设备列表时,大约需要12秒钟才能完成,这对我的任务来说很重要。
我还成功地每2-3秒成功使用一次LeScanCallback,但我确实发现了设备,但是在每次扫描时,它一次仅返回一个设备。
我正在尝试搜索信标,以便这种类型的方法可以将每次调用返回发现使用BlutoothLE的其他单个设备,而根本不返回我的信标信息。
因此,有没有一种方法可以查找范围内所有设备的列表,而无需等待12秒后startDiscovery()完成?
最佳答案
几点:
startDiscovery适用于蓝牙经典设备,而不适用于Bluetooth LE。
Android不包含任何特定于解析信标的API,仅用于处理原始Bluetooth 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.");
}
}