4

对于 6 和 7 版本,我应该在我的 iOs 应用程序中使用区域监控。如果我的应用程序被关闭,那么系统应该打开它。它适用于 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];
}
4

1 回答 1

8

这是现在从 iOS7 开始的预期行为。在 iOS6 及更早版本中,即使您从应用切换器手动终止应用,当用户进入/退出区域时,您仍然会收到通知。iOS7改变了这种行为。如果用户已经从应用切换器中终止了应用,即向上滑动您的应用,那么他们将不再收到任何基于位置的通知,包括区域监控通知。一位 Apple 员工在 Apple 官方开发者论坛中证实了这一点 -链接在这里

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

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

编辑:正如@herz 下面所指出的,从 iOS 7.1 开始,后台监控功能已恢复到 iOS 6 中的状态。区域将受到监控,您的应用即使从应用切换器中被终止也会收到通知。

于 2013-11-13T18:11:26.253 回答