Обновить местоположение в фоновом режимеIOS

Программируем под IOS
Ответить
Anonymous
 Обновить местоположение в фоновом режиме

Сообщение Anonymous »

Я хочу получить местоположение пользователя, даже если пользователь не использует приложение. Теперь я могу получить местоположение после нажатия кнопки «Домой», и приложение перейдет в фоновое состояние, но через несколько секунд обновление местоположения остановилось. И когда я убиваю обновление местоположения приложения, оно останавливается. это мой код в делегате приложения.

Код: Выделить всё

 let locationManager = CLLocationManager()
var LatitudeGPS = String()
var LongitudeGPS = String()
var speedGPS = String()
var Course = String()
var Altitude = String()
var bgtimer = Timer()

func applicationDidEnterBackground(_ application: UIApplication) {

self.doBackgroundTask()
}

func beginBackgroundUpdateTask() {

backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {
self.endBackgroundUpdateTask()
})

}

func endBackgroundUpdateTask() {
UIApplication.shared.endBackgroundTask(self.backgroundUpdateTask)
self.backgroundUpdateTask = UIBackgroundTaskInvalid
}
func doBackgroundTask() {

DispatchQueue.global(qos: .background).async {

self.beginBackgroundUpdateTask()
self.StartupdateLocation()
self.bgtimer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(self.bgtimer(timer:)), userInfo: nil, repeats: true)
RunLoop.current.add(self.bgtimer, forMode: RunLoopMode.defaultRunLoopMode)
RunLoop.current.run()
self.endBackgroundUpdateTask()

}

}

func bgtimer(timer:Timer!){
print("Fired from Background ************************************")
updateLocation()
}
func StartupdateLocation() {
locationManager.delegate = self
locationManager.startUpdatingLocation()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
}

func updateLocation() {
locationManager.startUpdatingLocation()
locationManager.stopUpdatingLocation()
print("Latitude: \(LatitudeGPS)")
print("Longitude: \(LongitudeGPS)")
print("Speed: \(speedGPS)")
print("Heading: \(Course)")
print("Altitude BG: \(Altitude)")
DispatchQueue.main.async {
print(UIApplication.shared.backgroundTimeRemaining)

}
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

LatitudeGPS = String(format: "%.10f", manager.location!.coordinate.latitude)
LongitudeGPS = String(format: "%.10f", manager.location!.coordinate.longitude)
speedGPS = String(format: "%.3f", manager.location!.speed)
Altitude = String(format: "%.3f", manager.location!.altitude)
Course = String(format: "%.3f", manager.location!.course)

}
}
Я думаю, что через несколько секунд мое приложение завершилось и обновление местоположения прекратилось.
Я хочу, чтобы через 20 минут это приложение завершило работу (ОС или пользователя) и прекратило обновлять местоположение, чтобы сохранить заряд батареи.
В чем моя проблема с обновлением местоположения?

Подробнее здесь: https://stackoverflow.com/questions/473 ... background
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»