如何在Android中为Beacon扫描提供自定义UUID?

时间:2014-06-11 11:33:32

标签: ibeacon-android android-ibeacon

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

startLeScan(UUID[], BluetoothAdapter.LeScanCallback) 

而不是

startLeScan(BluetoothAdapter.LeScanCallback) 

仅扫描特定信标。但它并没有扫描任何信标。任何人都可以告诉如何实现此功能。

1 个答案:

答案 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