如何在 didExitRegion 中获取信标主要和次要 id

Posted

技术标签:

【中文标题】如何在 didExitRegion 中获取信标主要和次要 id【英文标题】:How to get beacon major and minor id in didExitRegion 【发布时间】:2014-07-15 05:18:48 【问题描述】:

我为信标创建了一个 iphone 应用程序。我想在退出所有信标区域时显示消息。

    我不想显示每个信标退出区域的消息。例如,如果有 3 个信标,我只想在退出所有 3 个信标时显示消息。有可能吗?

    我还想在didExitRegion中获取现有的信标主要和次要值

我使用了以下代码:

-(void)locationManager:(CLLocationManager*)manager
   didRangeBeacons:(NSArray*)beacons
          inRegion:(CLBeaconRegion*)region

// Beacon found!
NSLog(@"iBeacons found");
//    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Successfully found" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show];

CLBeacon *foundBeacon = [beacons firstObject];

// You can retrieve the beacon data from its properties
NSString *uuid = foundBeacon.proximityUUID.UUIDString;
NSString *majorId = [NSString stringWithFormat:@"%@", foundBeacon.major];
NSString *minorId = [NSString stringWithFormat:@"%@", foundBeacon.minor];
NSLog(@"UUID: %@", uuid);

在上面的代码中,我可以获得信标的 uuid、major、minor。但我想在didExitRegion 中获取现有信标的值。有可能吗?

提前致谢。

【问题讨论】:

【参考方案1】:

使用可变数组来跟踪检测到的信标的区域详细信息。并通过检测新的信标区域来更新该阵列。像下面的代码

在委托方法didDetermineState添加

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

    if(state == CLRegionStateInside)
    
        [regions addObject:region]; // regions is the mutable array 
    

并用didExitRegion方法添加

// Tells the delegate that the user left the specified region. 
    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
    
        [regions removeObject:region];
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
        NSLog(@"\nExited region id: %@",beaconRegion.identifier);
        NSLog(@"\nExited region major: %@",beaconRegion.major);
        NSLog(@"\nExited region minor: %@",beaconRegion.minor);

       // Add a check with regions array here to show the custom alert message

    

【讨论】:

我尝试了您的解决方案,我确实得到了 UID ,但主要和次要值为 null。任何帮助都会很棒:)【参考方案2】:

我不想显示每个信标退出区域的消息。为了 例如,如果有 3 个信标,我只想在我 是所有 3 个信标的出口。有可能吗?

您的要求似乎并不完全清楚。如果这三个信标由您正在监视的单个区域描述,那么很简单:当您离开该区域中最后一个信标的范围时,您只会收到一条didExitRegion: 消息。否则,上面 Alex 的建议似乎是合理的:跟踪您正在进入和退出的区域,然后当您当前所在的区域计数降至零时,有条件地执行 didExitRegion: 中的一些代码。

而且我还想获​​得现有的信标主要和次要值 didExitRegion

我不确定“退出信标”在这里是否定义明确(您的意思是说,您离开的区域中的最后一个信标,因此触发了didExitRegion: 消息?),但无论如何您在这里无法得到你要的东西。在 Alex 记录 majorminor 的地方,它们是被监控的 region 的属性(在这种情况下,是被退出的),而不是任何特定的 beacon

【讨论】:

以上是关于如何在 didExitRegion 中获取信标主要和次要 id的主要内容,如果未能解决你的问题,请参考以下文章

didDetermineStateForRegion 和 didExitRegion 返回错误响应

在 didExitRegion 之后调用 iOS didRangeBeacons

AltBeacon:didExitRegion 和 didEnterRegion 交替

如何从 android 信标中读取主要、次要

在iOS中测距和监控时如何获取信标的MAC地址

在信标区域内每 10 分钟更新一次应用程序