我正在尝试在Android中扫描Beacons。我能够检测信标,但问题是我只想扫描具有特定UUID的信标。所以我使用了以下方法:
startLeScan(UUID[], BluetoothAdapter.LeScanCallback)
而不是
startLeScan(BluetoothAdapter.LeScanCallback)
仅扫描特定信标。但它并没有扫描任何信标。任何人都可以告诉如何实现此功能。
答案 0 :(得分:1)
请勿将蓝牙服务UUID与iBeacon Proximity UUID混淆。它们可能看起来很相似,但具有完全不同的价值和目的。
您提到的startLeScan
方法使用可选服务UUID来过滤提供特定服务的蓝牙设备的扫描。这不适用于扫描iBeacons,它不会宣传特定服务,并且需要额外的软件来解码其字段。
要使用特定的Proximity UUID扫描iBeacons并解码它们的值,请尝试开源Android iBeacon Library,它旨在完全按照您的描述进行操作。为单个Proximity UUID设置过滤器非常简单:
iBeaconManager.startMonitoringBeaconsInRegion(new Region("myRegion", "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6", null, null));
可以看到完整的示例here。
如果你想自己滚动,那么你需要解码返回到BluetoothAdapter.LeScanCallback
的每个蓝牙广告,丢弃非iBeacon广告,然后将每个iBeacon广告的Proximity UUID与你正在寻找的广告进行比较,并忽略任何不匹配的。上面提到的开源库有一个fromScanData
方法,可以将广告解码为iBeacon字段here。