iOS 上的后台信标测距
Posted
技术标签:
【中文标题】iOS 上的后台信标测距【英文标题】:Beacon Ranging in the Background on iOS 【发布时间】:2016-02-06 16:15:16 【问题描述】:我目前正在尝试通过使用位置监控,然后像这样触发测距,在 ios 中找到一种在后台对信标进行测距的方法:
func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion)
if (state == .Inside)
locationManager.startRangingBeaconsInRegion((region as? CLBeaconRegion)!)
然后我试图在信标范围内进行 API 调用
func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion)
for beacon in beacons
let minor = beacon.minor as Int
let major = beacon.major as Int
do
try APICall.canSeeBeacons(major, minor: minor)
catch
print("Error making API call")
但是,当手机在后台时,这只工作大约十分钟,十分钟后它不再工作,但我希望让它连续,以便在找到信标时始终可以进行 API 调用。我也确实在权限中设置了正确的密钥,并且我在我的 locationManager 上使用 requestAlwaysAuthorization()
【问题讨论】:
您是在尝试对单个信标进行超过 10 分钟的测距,还是在 10 分钟后没有收到区域进入/退出事件的问题? @Paulw11 这只是区域条目,我需要应用程序在检测到附近的信标时拨打电话 您的位置经理属于哪个班级?应用委托还是视图控制器? @Paulw11 视图控制器正在持有位置管理器 您应该尝试将其作为您的应用程序委托的属性并在那里处理区域事件。使用 NSNotifications 通知视图控制器 【参考方案1】:查看有关后台执行的 Apple 的 iOS 开发库: https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
如果您的应用程序的类型是更长的后台执行可接受的类型之一,请将键 Required background modes
添加到带有数组的 Info.plist
中,其中包含一种或多种启用的类型:audio
、@987654329 @、voip
、newsstand-content
、external-accessory
和/或bluetooth-central
。
请注意,在将您的应用发布到 App Store 之前,Apple 会对其进行审核。
已编辑:
我有一段时间没有使用它,但现在测试了一下,它似乎从 Xcode 6 开始变得更容易了。 请按照以下步骤操作:
1. 将密钥Required background modes
添加到您的Info.plist
2. 转至Capabilities
3. 选择适合的背景模式。
【讨论】:
我已经在 info.plist 中设置了所需的后台模式,但仍然存在十分钟后不执行任何操作的问题 你看到我编辑了答案吗?此外,10 分钟后,它将在后台继续运行,直到任务运行,然后可以暂停。例如,如果它在某个时候不再监控当前位置或不再播放音乐等。【参考方案2】:我遇到了同样的问题。正如评论员所说,我已将位置管理器委托方法移至 App Delegate 中。我还添加了这个:
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
而且它有效。
【讨论】:
以上是关于iOS 上的后台信标测距的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7.1 iPod 第 5 代请求信标状态和测距未发生