如何在 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 记录 major
和 minor
的地方,它们是被监控的 region 的属性(在这种情况下,是被退出的),而不是任何特定的 beacon。
【讨论】:
以上是关于如何在 didExitRegion 中获取信标主要和次要 id的主要内容,如果未能解决你的问题,请参考以下文章
didDetermineStateForRegion 和 didExitRegion 返回错误响应
在 didExitRegion 之后调用 iOS didRangeBeacons