加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – iBeacon每1分钟不断进入和退出一个区域

发布时间:2020-12-16 10:25:39 所属栏目:百科 来源:网络整理
导读:当iBeacon(使用Kontakt Beacon)在后台模式下进入区域时,我设法获得本地通知.同时我监控3个具有特定和的信标区域.唯一标识符(每个都具有相同的UUID但唯一的主要和次要组合).在锁定屏幕模式下,我的应用程序可以通知这些信标何时出现,但我不知道为什么即使信标
当iBeacon(使用Kontakt Beacon)在后台模式下进入区域时,我设法获得本地通知.同时我监控3个具有特定和&的信标区域.唯一标识符(每个都具有相同的UUID但唯一的主要和次要组合).在锁定屏幕模式下,我的应用程序可以通知这些信标何时出现,但我不知道为什么即使信标和我的应用程序仍然几乎彼此相邻,代理人DidExitRegion仍然被调用,请查看我的日志.

2014-01-18 11:56:49.828 sunlandbeacon[1385:60b] Enter Inactive mode

2014-01-18 11:56:49.848 sunlandbeacon[1385:60b] EnterBackgroundMode
with Badge 0

2014-01-18 11:57:28.629 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:57:29.305 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 1

2014-01-18 11:57:29.307 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 1

2014-01-18 11:58:15.173 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:58:15.176 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:58:15.178 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:58:15.880 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 2

2014-01-18 11:58:15.886 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 1

2014-01-18 11:58:16.175 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 3

2014-01-18 11:58:16.184 sunlandbeacon[1385:60b] Enter Region 2 with
flagvalue 2

2014-01-18 11:59:02.784 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:59:02.787 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:59:02.790 sunlandbeacon[1385:60b] Exit a beacon range

2014-01-18 11:59:03.491 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 4

2014-01-18 11:59:03.493 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 1

2014-01-18 11:59:03.792 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 5

2014-01-18 11:59:03.796 sunlandbeacon[1385:60b] Enter Region 2 with
flagvalue 2

解决方法

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回调中输入等效代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读