objective-c – iBeacon每1分钟不断进入和退出一个区域
当iBeacon(使用Kontakt Beacon)在后台模式下进入区域时,我设法获得本地通知.同时我监控3个具有特定和&的信标区域.唯一标识符(每个都具有相同的UUID但唯一的主要和次要组合).在锁定屏幕模式下,我的应用程序可以通知这些信标何时出现,但我不知道为什么即使信标和我的应用程序仍然几乎彼此相邻,代理人DidExitRegion仍然被调用,请查看我的日志.
解决方法
CoreLocation定期出现“故障”并向您发送通知说您退出该区域并且稍后再说您进入同一区域的情况并不少见.
在没有看到您的代码的情况下,很难确定这是发生了什么,但如果是,您可以通过在退出时添加软件过滤器并输入事件来轻松解决这个问题.如果在前几秒内发生同一区域的条目事件,则基本上忽略退出事件.同样,如果同一区域的退出事件在前几秒内发生,则忽略条目事件. 为此,您需要保留两个表,一个包含按区域键入的最新条目事件,其中包含按区域键入的最新退出事件. 下面是一个放在didEnterRegion回调方法顶部的代码示例,该方法使用名为_enteredTimes的类级NSMutableDictionary作为查找表来完成此任务: NSDate *now = [[NSDate alloc] init]; CLBeaconRegion *beaconRegion = (CLBeaconRegion *) region; NSString *regionKey = [NSString stringWithFormat: @"%@_%@_%@",beaconRegion.proximityUUID,beaconRegion.major,beaconRegion.minor]; NSDate *lastEntered = [_enteredTimes valueForKey:regionKey]; [_enteredTimes setValue: now forKey: regionKey]; if (lastEntered != Nil && [now timeIntervalSinceDate:lastEntered] < 10) { // last 10 secs // ignore this event return; } 您必须在didExitRegion回调中输入等效代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |