我想问一下 是否可以从使用 核心蓝牙 API 的树莓派构建的自定义 BLE 设备访问原始广告数据

用例是 将不断变化的数据 从 Raspberry Pi 广播到附近的多个 iOS 设备,并在 iOS 应用程序中使用它们。请参阅 this article 中的拓扑描述。

我已经发现 iBeacon 广告是从 Core Bluetooth API 中过滤掉的,并且只能从 Core Location API 访问,这需要 UUID 的知识。由于不断变化的数据,自定义 iBeacon 无论如何都不适用于此特定用例。但我不确定我是否可以通过 Core Bluetooth 实现这一点?

最佳答案

如果您将 Raspberry Pi 更改为传输非 iBeacon 格式,您可以随心所欲。如果是 iBeacon 广告,CoreBluetooth 只会过滤掉广告的原始字节。见这里:Obtaining Bluetooth LE scan response data with iOS

一个简单的解决方案是将您的 iBeacon 广告更改为开源 AltBeacon 广告。 CoreLocation 将不再拿起它,但 CoreBluetooth 将。

这是您在 NSDictionary CoreBluetooth 回调中的 adsData centralManager:didDiscoverPeripheral:advertisementData:RSSI: 中获得的示例。此示例是检测 AltBeacon 广告(开源信标标准)的结果,标识符为 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 2:

{
    kCBAdvDataIsConnectable = 0;
    kCBAdvDataManufacturerData = <1801beac 2f234454 cf6d4a0f adf2f491 1ba9ffa6 00010002 be00>;
}

您可以通过查看 AltBeacon 规范 here. 来了解如何解码上述字节 请注意,以上是使用 NSDictionary 语句打印到控制台的 iOS8 上检测到的广告的 NSLog 的实际内容。

关于ios - 使用 Core Bluetooth 在 iOS 8 上访问自定义 BLE 设备的原始广告数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26956957/

10-14 20:03