ios - 在后台持续更新 iOS 位置

标签 ios iphone location core-location

我正在尝试创建一个简单的 iOS 应用程序,它将在后台持续跟踪位置并在用户进入特定区域时以高精度通知(不想使用区域监控,因为它不够准确或不够快我想要什么)。

此应用程序在前台运行良好,但一旦我进入后台,它就无法运行。

我创建了一个测试应用程序来研究后台位置更新的工作原理。我制作了一个简单的应用程序,当发生位置更新时(向日志)打印一条消息。

我看到的是,在前台模式下,更新会按预期进行,但是当我锁定手机并且应用程序切换到后台时,位置更新会持续大约 30 秒,然后停止。 Apple 文档(我能找到)中没有提及解释此行为。

我确保我在 info.plist 中启用了后台处理(在“功能”-->“后台模式”-->“位置更新”中完成)

这是我用来测试的代码:

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

let locationManager = CLLocationManager() 
var counter = 0
override func viewDidLoad() {
    super.viewDidLoad()

    // configure location updates
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.distanceFilter = 0.1
    locationManager.pausesLocationUpdatesAutomatically = false

    locationManager.requestAlwaysAuthorization()

    locationManager.startUpdatingLocation()

}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print("location updated! \(counter)")
    counter = counter + 1
}

关于我可能遗漏的任何想法?我尝试了不同的位置精度设置(例如 BestForNavigation 等),但没有任何变化。

谢谢。

最佳答案

你必须在你的 plist 中添加这个:

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

添加这个

locationManager.allowsBackgroundLocationUpdates = true

关于ios - 在后台持续更新 iOS 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498693/

相关文章:

ios - 如何使用 Firestore Geopoint for Social Media app (swift Xcode) 获取基于位置的帖子

安卓 GPS 速度

ios - AVPlayer 停止播放并且不会再次恢复

ios - 为什么我的应用程序因为 "Multitasking apps may only use background"而被拒绝?

ios - 混合语言框架

iphone - 如何做到 tabBar.title != navBar.title ?

iphone - 我们可以为 iOS map 导航应用程序集成 Microsoft MapPoint 服务吗?

javascript - 任何人都知道如何使用 (HTML) 元标记、javascript 等在 iPhone 上将网站 (HTML) 锁定为纵向?

javascript - 通常无法在 iPhone 上锁定横向方向

java - 使用 FusedLocationProviderClient 请求位置更新不起作用,永远不会调用回调