Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序处于后台时接收来自信标的信号_Ios_Swift_Ibeacon - Fatal编程技术网

Ios 应用程序处于后台时接收来自信标的信号

Ios 应用程序处于后台时接收来自信标的信号,ios,swift,ibeacon,Ios,Swift,Ibeacon,我有一个iOS应用程序,可以与信标进行交互。 还具有检测信标信号的功能,如果信号超出范围,我想在数据库中存储一些信息(在本例中为核心数据) 因此,只要应用程序在前台运行,应用程序就可以正常工作。 我的理解是,当用户不积极使用应用程序,但仍然从信标接收信号时,我也可以将应用程序置于后台。 如果是,我如何完成这项任务我在info.plist中添加了以下内容,但仍然不起作用。还可以更新数据库吗?当应用程序运行时,您只能对信标进行测距(这是访问距离近似值的功能)。一旦你离开应用程序(按下主页按钮,导航到

我有一个iOS应用程序,可以与信标进行交互。 还具有检测信标信号的功能,如果信号超出范围,我想在数据库中存储一些信息(在本例中为核心数据)

因此,只要应用程序在前台运行,应用程序就可以正常工作。 我的理解是,当用户不积极使用应用程序,但仍然从信标接收信号时,我也可以将应用程序置于后台。 如果是,我如何完成这项任务
我在info.plist中添加了以下内容,但仍然不起作用。
还可以更新数据库吗?

当应用程序运行时,您只能对信标进行测距(这是访问距离近似值的功能)。一旦你离开应用程序(按下主页按钮,导航到其他应用程序等),iOS将暂停应用程序,测距将停止工作。在后台持续使用蓝牙收音机会很快耗尽智能手机的电池电量

然而,当智能手机进入和退出一个信标(或一组信标)的范围时,你可以让你的应用订阅被唤醒到后台。这被称为区域监控,这与地理围栏使用的机制相同

现在,“输入”和“退出”事件本身将无法访问距离近似值。但是,由于iOS会将你的应用程序唤醒到后台几秒钟来处理这些事件,因此在iOS将应用程序重新置于睡眠状态之前,范围实际上会在这段时间内恢复(假设你在应用程序挂起之前没有停止)

你甚至可以用鼠标将“几秒钟”延长到几分钟

所有这些都不需要使用后台模式,只需要“始终”授权即可使用位置服务

通常情况下,你不能用信标在后台无限期地运行应用程序。后台支持由苹果严格监管,只允许用于导航应用程序或音乐应用程序。人们有时会尝试使用“位置”背景模式来保持应用程序在背景中的活动性(从而能够对信标进行测距),有些人甚至报告说能够通过审查过程,但这似乎更多的是一个例外而不是一条规则

如果您决定尝试一下,您需要:

  • 启用“位置”背景模式
  • CLLocationManager
    实例上设置为
    true
  • 开始定期位置更新:

这将使应用程序在后台运行,即使您离开它。

这是一个很好的选项总结@borna,如果你决定简单地将背景扩展到最多3分钟,我会在这里写一篇博文,展示如何做到这一点:请看更新2下的完整源代码,因此我添加了didEnterRegion和didExitRegion。现在,如果我的应用程序最小化,并且我不在信标范围内,我是否应该看到消息“退出区域”,如果我在范围内,我是否应该看到消息“进入范围”?我没有看到最后两个函数被调用
    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()

        }
    }
}