Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios DidDeterministateForRegion和didExitRegion返回错误响应_Ios_Core Location_Ibeacon - Fatal编程技术网

Ios DidDeterministateForRegion和didExitRegion返回错误响应

Ios DidDeterministateForRegion和didExitRegion返回错误响应,ios,core-location,ibeacon,Ios,Core Location,Ibeacon,当用户进入信标区域和退出信标区域时,我向用户显示一个本地通知。出口是最重要的,因为我会告诉用户他们在那个地方住了多长时间。我使用区域监控,因为它允许我跟踪信标,即使应用程序处于后台或挂起状态。我遇到了一个错误,我正在监视3个信标(这发生在2个信标和1个信标上,但频率较低)。我的手机将处于休眠状态,我将继续监视信号灯。然后,我的应用程序将因其中一个信标的didExitRegion而唤醒,即使所有3个信标都面朝上坐在我手机的同一张桌子上。每次都是不同的灯塔,所以我控制了我们的信号强度。然后,一旦应用

当用户进入信标区域和退出信标区域时,我向用户显示一个本地通知。出口是最重要的,因为我会告诉用户他们在那个地方住了多长时间。我使用区域监控,因为它允许我跟踪信标,即使应用程序处于后台或挂起状态。我遇到了一个错误,我正在监视3个信标(这发生在2个信标和1个信标上,但频率较低)。我的手机将处于休眠状态,我将继续监视信号灯。然后,我的应用程序将因其中一个信标的didExitRegion而唤醒,即使所有3个信标都面朝上坐在我手机的同一张桌子上。每次都是不同的灯塔,所以我控制了我们的信号强度。然后,一旦应用程序被唤醒,它会重新发现信标并立即重新进入(因为它从一开始就没有离开过信号)。我在同一时间用Android设备检测信号,信标一直在广播,所以iPhone不应该丢失这些信号,特别是不需要很长的时间来考虑它是一个出口。 我试图通过使用

[self.locationManager requestStateForRegion:region];
但是,在这些情况下,将返回状态2,即CLRegionStateOutside

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

需要检查的几件事:

  • 验证在多个iOS设备上是否发生这种情况。iOS设备可能存在硬件问题,导致蓝牙接收较弱,或接收到更多无线电噪音。我自己从来没有见过这种情况,但我听到有报道称,有人坚持说他们在一些iOS设备上见过这种情况

  • 通过使用类似Locate for and的应用程序对信标进行测距,检查iOS设备和Android设备接收到的信号电平。两个设备上的信号电平应相似。强信号的RSSI约为负-60或更低。弱信号的RSSI约为-100或更负。如果信号微弱,可能会导致间歇性检测丢失,因为无线电噪声有时会阻止数据包被正确接收。如果您可以配置信标以增加其发射机功率水平,请执行此操作

  • 使用前景中的定位应用程序,对信标进行测距以检查信号电平,并以不同角度旋转信标。有些信标的天线方向图一侧较弱。你可能会发现方向给出的信号要弱得多,同样,弱信号可能会导致辍学

  • 检查信标的规格或配置设置,查看信标的传输频率。配置为很少传输以节省电池的信标(例如,每5秒一次)更可能导致这种情况,因为一行只需要6个丢失的数据包(罕见但可能)即可导致区域退出


另一种可能性是,在蓝牙频率范围内,您附近的区域周期性地出现异常数量的无线电噪声。这不太可能,但我以前见过。我住在街对面的美国海军基地,那里有强大的天线,在家里,我经常收到比办公室更高的数据包CRC错误率。

谢谢你的详细回答!这6个丢失的数据包是造成这种情况的原因。我设置了一个测试,让一个电话记录RSSIs,而另一个电话被监控。“错误退出”发生在我在-95和更低(或0)的一行中得到6个RSSI时。具体来说,我得到了-96,0,-95,0,-96,0。这可以通过减少广告时间间隔来解决吗?或者是否有某种方法使这6个丢失的数据包更为宽松?这对我来说表明,退出该区域的设备接收到的信号不如测距设备接收到的信号强。任何检测无论多么微弱都将保持区域内状态,因此现有手机必须在30秒内检测不到任何东西,原因之一就是我描述的。是的,增加广播速率和发射机功率都可能有所帮助,因为它提供了更多的数据包来检测和接收更强的信号。