【问题标题】:iBeacon continuing to send advertising packets in background, but being lost by another ranging deviceiBeacon 继续在后台发送广告包,但被另一个测距设备丢失
【发布时间】:2014-05-08 20:51:22
【问题描述】:

原始问题供参考 - 请参阅下面的更新

这是一个非常奇怪的问题。

我从电话 A 获得了 iBeacon 广播。我所读到的所有内容似乎都表明,一旦电话进入后台,它就不可能继续作为 iBeacon 广播。但是,我能够锁定我的手机,并且我继续看到(使用 LightBlue 或树莓派)iBeacon 广告包发出,具有相同的制造商数据。无限期。当手机进入后台时,数据包没有任何改变。

电话 B 正在侦听信标区域进入/退出事件,并在进入时进行测距。

每当电话 A 进入后台时,电话 B 就会丢失它 - 首先被测距的信标数量降至 0,然后退出该区域。但是,我可以检查继续通过空中发送的蓝牙数据包,并清楚地看到它们与应用程序在前台时发送的数据包相同。甚至传输速率似乎都差不多。

所以我的问题是:如果电话 B 继续从电话 A 接收相同的 iBeacon 格式的广告数据包,那么电话 B 如何确定它已离开这些数据包定义的区域?通过空中发送的实际数据似乎没有任何变化,那么信标丢失的依据是什么?

非常感谢您提供的任何见解!

更新

根据@davidyoung 的建议,我在 pi 上使用 hcidump 来检查数据包。我还留下了我的一个估计值以供参考(mac 地址 DA:E3:1D:A7:DE:E8)。我的设备有mac 72:F3:FC:7E:2F:DA 两种情况:

从前台应用开始:

pi@raspberrypi ~ $ sudo hcidump --raw & sudo hcitool lescan
[1] 2228
HCI sniffer - Bluetooth packet analyzer ver 2.4
LE Scan ...
device: hci0 snap_len: 1028 filter: 0xffffffff
DA:E3:1D:A7:DE:E8 (unknown)
> 04 3E 2A 02 01 00 01 E8 DE A7 1D E3 DA 1E 02 01 06 1A FF 4C 
  00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D DE 
  E8 1D A7 B6 BA 
DA:E3:1D:A7:DE:E8 estimote
> 04 3E 25 02 01 04 01 E8 DE A7 1D E3 DA 19 09 09 65 73 74 69 
  6D 6F 74 65 0E 16 0A 18 E8 DE A7 1D E3 DA B6 E8 DE A7 1D BB 
72:F3:FC:7E:2F:DA (unknown)
> 04 3E 2A 02 01 00 01 DA 2F 7E FC F3 72 1E 02 01 1A 1A FF 4C 
  00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D AE 
  85 69 C6 B6 A7 
72:F3:FC:7E:2F:DA (unknown)
> 04 3E 0C 02 01 04 01 DA 2F 7E FC F3 72 00 A8 

在后台启动应用程序:

pi@raspberrypi ~ $ sudo hcidump --raw & sudo hcitool lescan
[1] 2234
HCI sniffer - Bluetooth packet analyzer ver 2.4
LE Scan ...
device: hci0 snap_len: 1028 filter: 0xffffffff
DA:E3:1D:A7:DE:E8 (unknown)
> 04 3E 2A 02 01 00 01 E8 DE A7 1D E3 DA 1E 02 01 06 1A FF 4C 
  00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D DE 
  E8 1D A7 B6 B5 
DA:E3:1D:A7:DE:E8 estimote
> 04 3E 25 02 01 04 01 E8 DE A7 1D E3 DA 19 09 09 65 73 74 69 
  6D 6F 74 65 0E 16 0A 18 E8 DE A7 1D E3 DA B6 E8 DE A7 1D B6 
72:F3:FC:7E:2F:DA (unknown)
> 04 3E 0F 02 01 00 01 DA 2F 7E FC F3 72 03 02 01 1A A6 
72:F3:FC:7E:2F:DA (unknown)
> 04 3E 0C 02 01 04 01 DA 2F 7E FC F3 72 00 A6 

当我将应用程序从后台转移到前台(反之亦然)时,我没有看到任何新的数据包正在发出,但是当应用程序在背景。这个较小的数据包仅在我的应用处于后台时出现,而不是在设备干净启动时出现。

所以看起来虽然应用程序确实继续在后台发出 BTLE 数据包,但它们要小得多,而且不符合 ibeacon 标准。这与我在后台投放广告时在 CoreBluetooth“溢出”区域所读到的内容一致。

【问题讨论】:

  • 如果你完全关闭手机 A 会发生什么?
  • @Paulw11 完全关闭电话 A 导致没有从该设备接收到任何数据包。

标签: objective-c ios7 bluetooth-lowenergy ibeacon


【解决方案1】:

我怀疑您在 LightBlue 和 Raspberry Pi 上看到的数据包不是 iBeacon 广告。它们可能来自不同的硬件设备或 iOS 上的不同应用程序。

了解 iOS 确实允许您在后台做广告,而不是 iBeacon 广告。因此,如果您有另一个正在运行的应用程序正在宣传蓝牙 LE 服务,那么无论您的应用程序是否在前台,它的广告总是会被 LightBlue 和 Raspberry Pi 接收。

由于 LightBlue 不会向您显示数据包详细信息,因此无法使用此工具判断广告是否来自 iBeacon。但是你可以用 Raspberry Pi 来判断。像这样:

  1. 在后台启动 hcidump 向您显示原始 BLE 数据包

    sudo hcidump --raw &
    
  2. 开始 BLE 扫描

    sudo hcitool lescan
    

这将为您提供看到的所有 BLE 广告数据包的唯一列表。

尝试在后台运行您的应用程序,然后将其带到前台以查看看到了哪些其他广告(如果有)。我怀疑您会看到一个额外的广告,即您的 iBeacon 广告(仔细查看您的 ProximityUUID),并且您只会在您的应用处于前台时看到它。

【讨论】:

  • 嘿@davidyoung - 我发布了几个不同案例的转储,并在上面编辑了我的问题。看起来虽然设备继续发出数据包,但它要小得多。支持让我走上正轨 - 谢谢!
猜你喜欢
  • 2014-12-06
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多