gpt4 book ai didi

ios - 如何使用CoreLocation获取多个iBeacon?

转载 作者:行者123 更新时间:2023-12-01 18:15:02 25 4
gpt4 key购买 nike

我正在尝试使用CoreLocation获取我的iOS应用程序指定的多个iBeacon,其想法是,如果它们在范围内,它将在找到它们时通知我每个iBeacon。

问题是,在didEnterRegion和didExitRegion方法中,我必须提供一个CLBeaconRegion对象。每个iBeacon都有一个,如果我只是使用一个iBeacon,我可以只使用一个,但是既然有多个,我需要知道如何从那些方法中找到每个CLBeaconRegion。

也许我误会了它的工作方式;如果是这样,请告诉我。

- (void)getForUUUIDs:(CDVInvokedUrlCommand *)command
{
//Get an array of UUID's to filter by
self->locationUUIDs = [self getArgsObject:command.arguments];

self->locationManager = [[CLLocationManager alloc] init];
self->locationManager.delegate = self;
scanCallback = command.callbackId;

for(NSInteger i = 0; i < [locationUUIDs count]; i++) {
NSString *identifier = [NSString stringWithFormat:@"BLERegion %d",i];
CLBeaconRegion *thisRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[locationUUIDs allKeys] objectAtIndex:i] identifier:identifier];
[self->locationManager startMonitoringForRegion:thisRegion];
}
}

- (void)locationManager:(CLLocationManager*)manager didEnterRegion:(CLRegion*)region
{
[self->locationManager startRangingBeaconsInRegion:????];
}

-(void)locationManager:(CLLocationManager*)manager didExitRegion:(CLRegion*)region
{
[self->locationManager stopRangingBeaconsInRegion:????];
}

最佳答案

在触发监视器进入/退出事件的同一区域进行测距非常简单:

- (void)locationManager:(CLLocationManager*)manager didEnterRegion:(CLRegion*)region
{
[self->locationManager startRangingBeaconsInRegion:(CLBeaconRegion *)region];
}

这将在与用于开始监视的区域完全相同的范围内开始。请注意,有一个区域参数传递给回调。该Region参数将包含您之前设置的UUID。

另一点:虽然进入区域时开始测距并在离开区域时停止测距没有错,但实际上没有必要这样做。只需在开始监视的同时开始测距。因为在看不见iBeacon时测距不会做任何事情,所以最终结果几乎是相同的。唯一的不同是,如果您提前进行设置,则可能会更快地获得第一个远程回调。电池或系统资源没有多余的消耗。

提前设置它的另一个好处是,您不必强制转换CLRegion对象-您可以从原始对象开始。而且您不必实现监视回调方法,因此您的代码更简单。像这样:
- (void)getForUUUIDs:(CDVInvokedUrlCommand *)command
{
//Get an array of UUID's to filter by
self->locationUUIDs = [self getArgsObject:command.arguments];

self->locationManager = [[CLLocationManager alloc] init];
self->locationManager.delegate = self;
scanCallback = command.callbackId;

for(NSInteger i = 0; i < [locationUUIDs count]; i++) {
NSString *identifier = [NSString stringWithFormat:@"BLERegion %d",i];
CLBeaconRegion *thisRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[locationUUIDs allKeys] objectAtIndex:i] identifier:identifier];
[self->locationManager startMonitoringForRegion:thisRegion];
[self->locationManager startRangingBeaconsInRegion:thisRegion];
}
}

关于ios - 如何使用CoreLocation获取多个iBeacon?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22864591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com