当应用程序在后台时从信标接收信号
Receive signal from beacon while app is in the background
我有一个与信标交互的 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 中添加了以下内容,但仍然没有用。
也可以更新数据库吗?
当应用程序为 运行 时,您只能 范围信标 (这使您可以访问距离近似值)。一旦您离开该应用程序(按主页按钮,导航到另一个应用程序等),iOS 将暂停该应用程序,并且测距将停止工作。在后台持续使用蓝牙无线电会很快耗尽智能手机的电池。
但是,您可以让您的应用程序订阅在智能手机进入和退出信标(或一组信标)范围时被唤醒到后台。这称为 区域监控 ,它与地理围栏使用的机制相同。
现在,"enter" 和 "exit" 事件本身不会让您获得距离近似值。但是,由于 iOS 会将您的应用程序唤醒到后台几秒钟以处理这些事件,因此 ranging 实际上会在这段时间内恢复(假设您之前没有停止它该应用程序已暂停),然后 iOS 使该应用程序再次进入休眠状态。
您甚至可以使用 background execution task 将 "few seconds" 延长至几分钟。
以上所有都不需要使用后台模式——只需要 "always" 授权即可使用定位服务。
您通常无法使用信标无限期地将应用程序 运行 保留在后台。后台支持受到 Apple 的严格监管,并且仅允许用于例如导航应用程序或音乐应用程序。人们有时会尝试使用 "location" 后台模式来让应用程序在后台保持活动状态(因此能够测距信标),甚至有人报告说能够通过审查流程,但这似乎是更多的是例外而不是规则。
如果您决定尝试一下,您需要:
- 启用"location"后台模式,
- 在您的
CLLocationManager
实例上将 allowsBackgroundLocationUpdates 设置为 true
,
- 开始定期位置更新:startUpdatingLocation。
即使您离开应用程序 运行,它也应将其保留在后台。
我有一个与信标交互的 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 中添加了以下内容,但仍然没有用。
也可以更新数据库吗?
当应用程序为 运行 时,您只能 范围信标 (这使您可以访问距离近似值)。一旦您离开该应用程序(按主页按钮,导航到另一个应用程序等),iOS 将暂停该应用程序,并且测距将停止工作。在后台持续使用蓝牙无线电会很快耗尽智能手机的电池。
但是,您可以让您的应用程序订阅在智能手机进入和退出信标(或一组信标)范围时被唤醒到后台。这称为 区域监控 ,它与地理围栏使用的机制相同。
现在,"enter" 和 "exit" 事件本身不会让您获得距离近似值。但是,由于 iOS 会将您的应用程序唤醒到后台几秒钟以处理这些事件,因此 ranging 实际上会在这段时间内恢复(假设您之前没有停止它该应用程序已暂停),然后 iOS 使该应用程序再次进入休眠状态。
您甚至可以使用 background execution task 将 "few seconds" 延长至几分钟。
以上所有都不需要使用后台模式——只需要 "always" 授权即可使用定位服务。
您通常无法使用信标无限期地将应用程序 运行 保留在后台。后台支持受到 Apple 的严格监管,并且仅允许用于例如导航应用程序或音乐应用程序。人们有时会尝试使用 "location" 后台模式来让应用程序在后台保持活动状态(因此能够测距信标),甚至有人报告说能够通过审查流程,但这似乎是更多的是例外而不是规则。
如果您决定尝试一下,您需要:
- 启用"location"后台模式,
- 在您的
CLLocationManager
实例上将 allowsBackgroundLocationUpdates 设置为true
, - 开始定期位置更新:startUpdatingLocation。
即使您离开应用程序 运行,它也应将其保留在后台。