Мы работаем над приложением, которому необходимо местоположение после завершения работы. Я пытаюсь добиться этого, включив Фоновые режимы сервисы, т.е. location update
и background fetch
, но приложение не перезапускается тихо после значительного изменения местоположения. У меня есть свойства Enabled, такие как startMonitoringSignificantLocationChanges
и allowsBackgroundLocationUpdates
с моим менеджером местоположений на didFinishLaunchingWithOptions и на didUpdateLocations
создание CLRegion
и включение locationManager startMonitoring(for: region)
, но все это не работает.
Это то, что я написал в своем didFinishLaunchingWithOptions
if application.applicationState == .active {
LocationManager.shared.startMonitoringLocation()
}
// When there is a significant changes of the location,
// The key UIApplicationLaunchOptionsLocationKey will be returned from didFinishLaunchingWithOptions
// When the app is receiving the key, it must reinitiate the locationManager and get
// the latest location updates
// This UIApplicationLaunchOptionsLocationKey key enables the location update even when
// the app has been killed/terminated (Not in th background) by iOS or the user.
if launchOptions?[UIApplication.LaunchOptionsKey.location] != nil {
//You have a location when app is in killed/ not running state
LocationManager.shared.afterResume = true
LocationManager.shared.startMonitoringLocation()
LocationManager.shared.addApplicationStatus(toPList: "APP relaunch silently")
}
Диспетчер местоположений
func startMonitoringLocation() {
if (anotherLocationManager != nil) {
anotherLocationManager!.stopMonitoringSignificantLocationChanges()
}
anotherLocationManager = CLLocationManager()
anotherLocationManager!.allowsBackgroundLocationUpdates = true
anotherLocationManager!.pausesLocationUpdatesAutomatically = false
anotherLocationManager?.delegate = self
anotherLocationManager?.desiredAccuracy = kCLLocationAccuracyBestForNavigation
anotherLocationManager?.activityType = .otherNavigation
if CLLocationManager.locationServicesEnabled() {
switch CLLocationManager.authorizationStatus() {
case .notDetermined, .restricted, .denied:
print("No access")
case .authorizedAlways, .authorizedWhenInUse:
print("Access")
}
} else {
anotherLocationManager?.requestAlwaysAuthorization()
print("Location services are not enabled")
}
anotherLocationManager?.startMonitoringSignificantLocationChanges()
}
Проблема заключается вэлемент управления не входит в этот фрагмент кода.
if launchOptions?[UIApplication.LaunchOptionsKey.location] != nil {
//You have a location when app is in killed/ not running state
}