【发布时间】:2015-05-29 15:01:56
【问题描述】:
我正在使用 IBeacon 构建一个简单的 ios 应用程序,我使用 startMonitoringForRegion 来检测信标。那是 AppDelegte.m 代码:
NSUUID *beaconUUID = [[NSUUID alloc] initWithUUIDString:@"0040C159-12F6-4FC3-9189-87C069FFE5CF"];
NSString *regionIdentifier = @"iBeacons region 1";
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: beaconUUID identifier: regionIdentifier ];
self.beaconRegion.notifyEntryStateOnDisplay = YES;
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager startRangingBeaconsInRegion:beaconRegion];
然后在 didDetermineState 回调:
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region{
if (state == CLRegionStateInside) {
//Start Ranging
[manager startRangingBeaconsInRegion:(CLBeaconRegion*) region];
NSLog(@"didDetermineState -->enter region");
}
else{
//Stop Ranging
[manager stopRangingBeaconsInRegion:(CLBeaconRegion*) region];
NSLog(@"didDetermineState -->exit region");
}
}
当 iBeacons 彼此远离时,这在前台、后台或关闭应用程序时都可以正常工作。但是当 iBeacons 彼此靠近时,我发现了一些问题。
在执行了几次测试后,我得出结论,RangingBeaconsInRegion 在后台或应用程序关闭时无法正常工作,只能进行监控。
当您进入或退出信标区域时,应用程序将在后台启动约 5 秒,并会收到对 didDetermineState: forRegion: 方法的回调。您可以在这 5 秒内在后台进行测距,之后 iOS 将再次暂停您的应用。
当 iBeacon 彼此远离时,这是完美的。当 iBeacon 距离太近,回调 didDetermineState: not called 退出 iBeacon 区域,然后进入下一个 iBeacon 区域时,就会出现问题。
有没有办法手动强制区域退出?或者其他解决这个问题的方法?
谢谢!
【问题讨论】:
-
您好,如何在应用程序关闭时检查信标检测是否正常工作。我无法测试它。谢谢。
-
您可以尝试发送本地通知,或在您的应用中创建记录。
标签: ios core-location ibeacon