1

我正在尝试在 Android 中扫描信标。我能够检测到信标,但这里的问题是我只想扫描具有特定 UUID 的信标。所以我使用了以下方法:

startLeScan(UUID[], BluetoothAdapter.LeScanCallback) 

代替

startLeScan(BluetoothAdapter.LeScanCallback) 

仅扫描特定信标。但它没有扫描任何信标。谁能告诉如何实现这个功能。

4

1 回答 1

1

不要将蓝牙服务 UUID 与 iBeacon Proximity UUID 混淆。它们可能看起来相似,但具有完全不同的价值观和目的。

您提到的startLeScan方法采用可选服务 UUID 来过滤提供特定服务的蓝牙设备的扫描。这不适用于扫描不宣传特定服务的 iBeacons,并且需要额外的软件来解码其字段。

要扫描具有特定 Proximity UUID 的 iBeacon 并解码它们的值,请尝试开源Android iBeacon 库,该库旨在完全按照您的描述进行操作。为单个 Proximity UUID 设置过滤器非常简单:

iBeaconManager.startMonitoringBeaconsInRegion(new Region("myRegion", "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6", null, null));

一个完整的例子可以在这里看到。

如果您想自己滚动,则需要解码返回的每个蓝牙广告BluetoothAdapter.LeScanCallback,丢弃非 iBeacon 广告,然后将每个 iBeacon 广告的 Proximity UUID 与您要查找的广告进行比较,并忽略任何不匹配的广告. 上面提到的开源库在这里fromScanData有一个方法可以将广告解码为 iBeacon 字段。

于 2014-06-11T12:45:33.130 回答