ios中的区域监控7

时间:2013-11-08 10:42:21

标签: ios objective-c location

我应该在我的iOs app中使用区域监控6和7版本。如果我的应用程序已关闭,那么系统应该打开它。它适用于iOS 6,但在iOS 7中不起作用。我的意思是,如果应用程序在ios 7中关闭,则系统无法打开我的应用程序。

关于关闭应用程序,我的意思是,从内存中删除此应用程序。

我使用此代码:

manager = [CLLocationManager new];

manager.delegate = self;

[manager startUpdatingLocation];

if ([UIDevice isIOS7OrHigher]) {

    CLCircularRegion *reg = [[CLCircularRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake(56.844947, 53.208852) radius:20.f identifier:@"reg14132"];

    [manager startMonitoringForRegion:reg];

    CLCircularRegion *reg1 = [[CLCircularRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake( 56.844158,53.20913) radius:20.f identifier:@"reg14131232"];

    [manager startMonitoringForRegion:reg1];

} else {

    CLRegion *reg = [[CLRegion alloc]  initCircularRegionWithCenter:CLLocationCoordinate2DMake(56.844947, 53.208852) radius:20.f identifier:@"reg14132"];

    [manager startMonitoringForRegion:reg];

    CLRegion *reg1 = [[CLRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake( 56.844158,53.20913) radius:20.f identifier:@"reg14131232"];
    [manager startMonitoringForRegion:reg1];
}

我使用委托方法进行日志。另外,我使用此代码进行测试

if (launchOptions) {
    UILocalNotification *note = [UILocalNotification new];
    note.alertBody = [NSString stringWithFormat:@"launchOptions = %@", launchOptions];
    [[UIApplication sharedApplication] presentLocalNotificationNow:note];
}

1 个答案:

答案 0 :(得分:8)

现在这是从iOS7开始的预期行为。在iOS6及更早版本中,即使您从应用程序切换器手动终止应用程序,当用户进入/退出某个区域时,您仍会收到通知。 iOS7的此行为已已更改。如果用户已从应用切换器中杀死了该应用,即通过向上滑动您的应用,则他们将不再接收任何基于位置的通知,包括区域监控通知。 Apple官方开发人员论坛中的Apple员工证实了这一点 - link here

Apple Dev提供的唯一解决方案是“请提交错误报告,如果此更改对您有用,或者您希望看到不同的内容。”

我个人认为这是一个糟糕的决定,因为它违背了背景通知的目的。您将不得不建议您的用户从iOS6升级,因为他们将继续期望类似的功能,并且此更改未在任何地方记录。

编辑:正如下面的@herz指出的那样,从iOS 7.1开始,后台监控功能已恢复到iOS 6的状态。区域将受到监控,您的应用甚至会收到通知当它从应用程序切换器中被杀死时。