区域监控背景中的信标区域不工作

时间:2014-12-09 13:36:27

标签: ios iphone core-location

我在应用程序处于后台时遇到区域监控问题。 如果应用程序位于前台,则区域进入和退出将被调用,但在后台进行则不会被调用(有时它们会触发但非常罕见)。

信标区域监控如何适用于iOS 8.1.1?当在背景中处于信标接近时,区域是否应立即进入/退出?

我该怎么做以确保它有效?

Background ModesLocation UpdatesUses Bluetooth LE accessories是否必须启用后台信标监控? GeoFencing在没有这些的情况下为我工作。

我已经做过的事情:

  • 为每个地区设置这些:

    beaconRegion.notifyOnExit=YES; beaconRegion.notifyOnEntry=YES; beaconRegion.notifyEntryStateOnDisplay = YES;

  • 确保设置中的所有内容都有序(应用程序刷新等)

编辑:

我已经创建了一个新项目但它仍然无效。这是代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {



_locationManager = [[CLLocationManager alloc] init];
_locationManager.pausesLocationUpdatesAutomatically = NO;
_locationManager.desiredAccuracy = 25;
_locationManager.delegate = self;
[_locationManager requestAlwaysAuthorization];
[_locationManager startUpdatingLocation];

CLBeaconRegion* reg =[self prepareBeacon:@"here i put my UUID" :446 :2196];
[_locationManager startMonitoringForRegion:reg];
[_locationManager startRangingBeaconsInRegion:reg];

return YES;
}

-(CLBeaconRegion*)prepareBeacon:(NSString*)uuid :(int)maj :(int)min
{

NSString* identifier = [NSString stringWithFormat:@"%@,%d,%d", uuid, maj, min];

CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:uuid] major:maj  minor:min identifier:identifier];

beaconRegion.notifyOnExit=YES;
beaconRegion.notifyOnEntry=YES;
beaconRegion.notifyEntryStateOnDisplay = YES;

return beaconRegion;
}

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

}

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{

}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{

}

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{

}

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

}

其他一些信息:

  • 除了创建一个全新的iOS8项目并添加代码之外,我已将NSLocationAlwaysUsageDescription添加到* .plist文件中。
  • 我在[{1}}和didEnterRegion中添加了断点。它在前台工作,在后台(iPhone在主屏幕或锁定)时不起作用
  • 在4S,iOS 8.1.1上进行测试

2 个答案:

答案 0 :(得分:3)

您需要确保已在CCLocationManager

下调用该方法
- (void) requestAlwaysAuthorization

这使您的应用可以更新前景和背景的变化,与下面的行相比,只允许您的应用在前台得到通知:

- (void) requestWhenInUseAuthorization

一旦用户响应请求,将使用更新的授权状态调用以下方法:

- (void) locationManager: (CLLocationManager*) manager
didChangeAuthorizationStatus: (CLAuthorizationStatus) status

来源: https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/cl/CLLocationManager

答案 1 :(得分:3)

答案是:背景区域监控对我们用户来说是一个谜。有时它会在一秒钟内启动,有时需要更长时间。这取决于很多因素,但我的主要问题是我使用的是iPhone 4s。

也许这会帮助任何人而不会失去这么多时间: 4s在背景信标扫描中很糟糕

来源:在最新iOS和iPhone 6的两款4S手机上进行了测试.iPhone6可在几秒钟内收到信标通知。