我一直在阅读有关位置更新如何工作的苹果开发人员资源,并阅读了有关它的大量堆栈溢出问题。当用户将应用程序置于后台时,我一直试图获取用户在我的应用程序上的位置。下面的代码不是我的代码,我从另一个 stacker 溢出源问题中找到它,这是唯一让我接近我需要的东西。下面的代码可以工作,只更新我的用户位置 25 分钟,然后就停止,但我想要的是,只要应用程序在后台,它就一直工作:(。问题已得到解答,但我'我不太明白整个后台的工作原理。我听说苹果会在 3 分钟左右后自动终止你的应用程序,所以无论如何绕过它会有所帮助。而且我也确实检查了我的后台模式,如位置更新和后台获取中所示甚至还需要 info.plist,据说它应该在终止后自动唤醒我的应用程序,但这似乎也不起作用。如果有人可以帮助我,这将对我的新应用程序有巨大帮助,这是我需要的最后一段代码啊哈,提前谢谢大家。我也想在不添加无声音频文件的情况下做到这一点,这样我的应用程序就不会被拒绝:)
override func viewDidLoad() {
super.viewDidLoad()
self.locationManager.requestAlwaysAuthorization()
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.allowsBackgroundLocationUpdates = true
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
var timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
if UIApplication.sharedApplication().applicationState == .Active {
} else {
backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
self.backgroundTimer.invalidate()
self.backgroundTimer = NSTimer.scheduledTimerWithTimeInterval( 60.0, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
})
}
}
func updateLocation() {
var timeRemaining = UIApplication.sharedApplication().backgroundTimeRemaining
print(timeRemaining)
if timeRemaining > 60.0 {
print("timeRemaining > 60.0")
}
} else {
if timeRemaining == 0 {
print("timeRemaining = 0") UIApplication.sharedApplication().endBackgroundTask(backgroundTaskIdentifier)
}
backgroundTaskIdentifier2 = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
self.backgroundTimer.invalidate()
self.backgroundTimer = NSTimer.scheduledTimerWithTimeInterval( 60.0, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
})
}
}
最佳答案
您(目前)无法在后台连续运行应用程序。这就是苹果公司的意图,你必须接受这一点。一旦您的应用程序进入后台,核心操作系统就可以随时终止它。
关于swift - 在后台连续运行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024564/