我正在向用户显示当他们进入信标区域时以及退出信标区域时的本地通知。出口是最重要的,因为我告诉用户他们在该位置居住了多长时间。我正在使用区域监视,因为它使我即使在应用程序处于后台或挂起状态时也可以跟踪信标。我在监视3个信标时遇到一个错误(这种情况发生在2和1上,但发生频率较低)。我的手机将进入睡眠状态,并且我将继续监视信标。然后,即使所有3个信标都面朝上坐在我的手机的同一张桌子上,我的应用仍会由于didBeitRegion而唤醒。每次它都是一个不同的信标,所以我决定了信号强度。然后,一旦应用程序苏醒,它将重新找到信标并立即重新进入(因为它从未将信号放在第一位)。我同时使用Android设备检测到信号,并且信标一直在广播,因此iPhone不应丢失这些信号,尤其是在没有足够长的时间考虑到它退出的情况下。

我试图通过使用补救

[self.locationManager requestStateForRegion:region];

但是,在这些情况下,这将返回状态2,即CLRegionStateOutside。

我应该如何解决?有没有人有过类似的经历。我应该能够在信标区域中停留1分钟或1个小时,并且只有在30秒钟内未检测到信标时才退出。

最佳答案

要检查的几件事:

  • 验证是否在多个iOS设备上发生这种情况。 iOS设备可能存在硬件问题,例如蓝牙LE接收较弱,或者接收到更多的无线电噪声。我本人从未见过此消息,但我听到其他人坚持认为他们已在某些iOS设备上看到此消息的报道。
  • 使用诸如Locate for iOSAndroid之类的应用来对信标进行测距,以检查iOS设备和Android设备接收的信号电平。两种设备上的信号电平应相似。强信号的RSSI约为-60或更低。弱信号的RSSI约为-100或更大。如果信号较弱,则可能会导致间歇性检测丢失,因为无线电噪声有时会阻止正确接收数据包。如果可以配置信标以增加其发射器功率,请执行此操作。
  • 在“定位”应用程序处于前台的情况下,将信标置于范围内以检查信号电平并以不同角度旋转它。一些信标的天线方向图在一侧要弱得多。您可能会发现方向给出的信号要弱得多,同样,信号弱会导致信号丢失。
  • 检查信标的规格或配置设置,以查看信标传输的频率。被配置为很少传输以节省电池电量的信标(例如,每5秒一次)更可能导致这种情况,因为连续只需要6个丢失的数据包(稀有但可能)导致区域退出。

  • 另一种可能性是,在您附近的蓝牙频率范围内,周期性地有异常数量的无线电噪声。这不太可能,但是我以前见过。我住在一条配备强大天线的美国海军陆战队的马路对面,在家里,我得到的分组CRC错误率通常比办公室要高得多。

    关于ios - didDetermineStateForRegion和didExitRegion返回错误的响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35902382/

    10-10 21:08