当应用在后台时,从信标接收信号

时间:2015-11-29 16:00:43

标签: ios swift ibeacon

我有一个与灯塔互动的iOS应用。 还具有检测来自信标的信号的功能,如果信号超出范围,我想在数据库中存储某些东西(在这种情况下是核心数据)

    func updateDistance(distance: CLProximity) {
    UIView.animateWithDuration(1.0) { [unowned self] in
        switch distance {
        case .Unknown:
            self.view.backgroundColor = UIColor.grayColor()
            self.distanceReading.text = "No Beacon Signal Detected"
            updateDatabaseWithLocation()

        }
    }
}

因此,只要应用程序在前台运行,应用程序就可以正常运行。 我的理解是,当用户没有主动使用应用程序并仍然从信标获取信号时,我也可以在后台使用该应用程序。 如果是这样,我该如何完成这项任务?
我在info.plist中添加了以下内容,但仍然无法正常工作。
也可以更新数据库吗?enter image description here

1 个答案:

答案 0 :(得分:6)

当应用运行时,您只能范围信标(这使您可以访问距离近似值)。一旦你离开应用程序(按主页按钮,导航到另一个应用程序等),iOS将暂停该应用程序,并且测距将停止工作。在后台持续使用蓝牙无线电将迅速耗尽智能手机的电池电量。

但是,当智能手机进入和退出信标范围(或一组信标)时,您可以让您的应用程序预订到后台。这称为区域监控,它与地理围栏使用的机制相同。

现在,“输入”和“退出”事件本身不会让您访问距离近似值。但是,由于iOS会将您的应用程序唤醒到后台几秒钟来处理这些事件,范围实际上会在一段时间内恢复(假设您在应用程序被暂停之前没有停止它),之前iOS让应用程序重新入睡。

您甚至可以使用background execution task将“几秒钟”延长到几分钟。

以上所有内容都不需要使用后台模式 - 只需使用“始终”授权即可使用位置服务。

通常情况下,您无法使用信标无限期地让应用在后台运行。背景支持受Apple严格监管,并且仅允许用于导航应用或音乐应用。人们有时会尝试使用“位置”背景模式来保持应用程序在后台运行(因此能够进行测距信标),有些人甚至报告说它能够通过审核过程,但这似乎更多一个例外而非规则。

无论如何,如果你决定尝试一下,你需要:

即使您离开,这也应该让应用程序在后台运行。