我需要获取我范围内所有设备的列表,以便可以依次调用它们上的某个方法。

到目前为止,我一直在尝试使用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.");
        }
    }

09-28 12:47