【问题标题】:Obtaining Bluetooth LE scan response data with iOS使用 iOS 获取蓝牙 LE 扫描响应数据
【发布时间】:2014-10-12 23:17:56
【问题描述】:

我正在使用低功耗蓝牙设备,我想知道是否可以在不连接的情况下使用 iOS 和核心蓝牙读取扫描响应数据到广告。

我了解到,在读取广告数据包后,您可以以 31 字节扫描响应的格式向外围设备请求额外数据。我知道Core Bluetooth建议如果广告包已满,您可以将本地名称放在扫描响应包中,但它是否允许您看到整个包?

【问题讨论】:

    标签: ios bluetooth bluetooth-lowenergy core-bluetooth ibeacon


    【解决方案1】:

    是的,您可以使用CoreBluetooth 读取 BLE 广告的完整制造商数据或服务数据字节只要它不是 iBeacon 广告。 如果是 iBeacon 广告,@ 987654324@ 将阻止您查看字节。你使用的回调如下:

    - (void)   centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI
    

    原始服务数据或制造商数据字节将出现在NSDictionary *advertisementData 中。但他们持有这些数据的密钥将被 iBeacons 的操作系统删除。

    以下是您在回调中的广告数据NSDictionary 中获得的示例。此示例用于检测 AltBeacon 广告(一种开源信标标准),标识符为 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 2

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

    您可以通过查看 AltBeacon 规范 here. 来了解如何解码上述字节

    有关您无法读取 iBeacon 数据的原因以及显示您如何设置的其他代码的更多详细信息,请参见此处:

    http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html

    【讨论】:

    • 我特别关心扫描响应数据。你知道iOS是否自动请求扫描响应数据,或者如何发起请求?
    • 以上信息适用于广播广告本身的数据。 iOS 确实 NOT 会自动请求扫描响应数据。我没有尝试过这样做,乍一看,我在CBCentralManager 中没有看到任何允许你这样做的东西......这可能应该是一个新问题。
    • 核心蓝牙在应用程序处于前台时会自动请求扫描响应数据。这不是你可以要求的。 didDiscoverPeripheral 通常会被调用两次。第一次没有扫描响应数据,第二次有。但是,在后台,可能不会发生带有扫描响应数据的第二个事件。
    • 我相信这篇文章非常混乱 - Core Bluetooth 收到的 RAW ADVERTISEMENT 字节不可用。有字节是的,例如服务和制造商数据,但这些字段已经被解析。 iOS 过滤了很多我们没有得到的信息 - 我相信阅读这篇文章的人会混淆由 BLE 设备传输并由 iOS 接收的完整原始字节,这些字节来自 advertisementData 参数中可用的字节。如果确实有办法获取原始字节,请告诉我。
    • @dinesharjani,您说的是正确的,完整广告的原始字节不可用,但制造商数据部分的 原始字节 BLE制造商广告类型绝对有广告。类似地,服务数据的原始字节在 BLE 服务广告类型中可用。我已经编辑了我的答案以使其更清楚。
    【解决方案2】:

    我正在使用具有一些制造商数据的外围设备,我认为这些数据在扫描响应中传输,因为在具有 128 位 UUID 加上通道、RSSI 和可连接标志的初始广告中没有空间容纳它。我收到了两次对 didDiscoverPeripheral:... 的快速连续调用(相隔 3 毫秒,包括我的代码中的一些处理时间)。第一个在字典中没有 kCBAdvDataManufacturerData 键,但第二个有。我假设扫描响应 被自动请求并且回复导致第二次调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多