Beacon - StartRanging和stopRanging取决于Beacon Proximity

时间:2016-09-01 07:56:08

标签: ios ibeacon use-case estimote

有人可以帮我解决问题。

我目前的灯塔设置:

信标设备 - Estimote。 UUID - 两个信标也一样。

  1. 我把每个灯塔放在两个房间里,房间相距20-30米
  2. 当我进入一个特定的房间时,我正在点击网络服务并更新某些东西(当接近或立即接近时)(检查这个房间的主要和未成年人是否真的属于这个房间) 3.它还会点击另一个Web服务并更新某些内容(当距离很远且未知时)。
  3. 当前算法存在问题: 1.当我进入房间1并且如果它接近或立即时,它会命中webservice1。当发生这种情况时,room2接近将是远或未知,然后webservice2再次击中,并且还有很多波动。有时当我在room1时,room2信标接近显示为接近。我不这样做

    新方法和问题

    1. 我想监视特定区域,比如当我靠近5米远的地方时说房间1,并且只有当接近或立即接近时才开始测量信标。当距离远或未知或距离我超过5米时停止测距
    2. 当我靠近room2(5米远)时,如果房间2靠近或立即接近,它应该开始测量房间2并停止测距房间1
    3. 我想有明确的方法或方法来编写算法来实现上述目标。计算可以使用邻近度或使用其他一些想法(如RSSI和邻近或其他的组合)
    4. 如果您可以通过示例详细解释我如何实现新方法,或者您可以告诉我是否有其他更好的方法,那将是很好的,但请用代码解释。

      我最关心的是,当我在房间1或距离房间1只有5米时,它不应该是房间2的灯塔,反之亦然。

2 个答案:

答案 0 :(得分:0)

您是否考虑过将每个灯塔放在自己的地区?因此,1号房间是一个区域,2号房间是另一个区域。

之后我会使用locationManager:didEnterRegion:locationManager:didExitRegion:。在这些中,您可以根据您所在的房间开始和停止两个信标区域的范围。

请注意,Apple Docs表示:

  

在iOS模拟器或设备上测试区域监控代码时,请注意区域事件可能不会在跨越区域边界后立即发生。为防止虚假通知,iOS在满足某些阈值条件之前不会发送区域通知。具体来说,用户的位置必须越过区域边界,离开边界最小距离,并在报告通知之前保持最小距离至少20秒。

     

特定阈值距离由硬件确定   目前可用的定位技术。例如,   如果禁用Wi-Fi,则区域监控要少得多   准确。但是,出于测试目的,您可以假设   最小距离约为200米。

示例:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    if (region.identifier == YOUR ROOM 1 IDENTIFIER)
    {
       //Start ranging room 1
    }
    else
    {
       //Start ranging room 2
    }
}

- (void)locationManager:(CLLocationManager *)manager
    didExitRegion:(CLRegion *)region
{
    if (region.identifier == YOUR ROOM 1 IDENTIFIER)
    {
         //Stop ranging room 1
    }
    else
    {
         //Stop ranging room 2
    }
}

答案 1 :(得分:0)

核心问题是在不适当的时间向服务器发送信息。这与开始测距无关。

当接近度相对接近时,您无法开始测距 - 您需要测距以确定接近度。

我建议您不要一直启动和停止测距的算法,而是建立一个过滤器来决定何时进行服务器调用。这是我建议的逻辑的起点:

如果满足以下所有条件,则调用服务器:

  • beacon.accuracy< 3
  • 检测到的所有其他信标都具有beacon.accuracy> 3
  • 最近没有为此灯标进行过服务器调用

编辑:您可以通过将信标发射机功率设置得尽可能高来降低精度读数的波动,以最大化信噪比。