iOS位置背景模式运行时间

时间:2014-10-09 08:05:25

标签: ios cllocationmanager ibeacon

我们正在使用信标和iOS进行一些工作,并研究在我们第一次进入信标范围和向用户发出通知之间应用去抖的选项。

所以流程将是,

  1. 进入灯塔范围。
  2. 启动计时器。
  3. 计时器到期,发布通知。
  4. 当应用程序处于前台时,他们似乎没有任何并发​​症,但我不确定这将如何在应用程序关闭时起作用。

    如果我们注册了位置背景模式,那么当我们进入信标范围时应用程序就会启动,但我不清楚我们将允许运行多长时间的应用程序。如果应用程序只允许运行很短的时间,那么我们将没有时间启动计时器并使其过期。

    任何人都可以了解位置背景模式允许应用程序在后台启动这么多的执行时间吗?

2 个答案:

答案 0 :(得分:1)

我建议你进入信标区域后开始测量信标 - 这将为你提供每秒一次的测距回调 - 即使你的应用程序在后台。您可以计算这些事件并使用它来确定何时发布通知。此时,您可以停止对信标进行测距。

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

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

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region {
        self.beaconCount++;
        if (self.beaconCount > SOME_THRESHOLD) {
            [manager stopRangingBeaconsInRegion:region];
            [self postLocalNotification];
        }
}

因为这是使用位置背景模式,所以可用的后台时间量没有总体限制,但每次调用几秒钟的委托方法都有限制 - 但此代码不会成为在那附近的任何地方。

答案 1 :(得分:1)

您可以为此目的使用本地通知。无法保证您的应用在后台继续运行多长时间。如果您想知道操作系统给您多少时间,您可以查看UIApplication的backgroundTimeRemaining属性。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/index.html#//apple_ref/occ/instp/UIApplication/backgroundTimeRemaining