Приложение не запускается в фоновом режиме после значительного изменения местоположения - PullRequest
2 голосов
/ 11 октября 2019

Мы работаем над приложением, которому необходимо местоположение после завершения работы. Я пытаюсь добиться этого, включив Фоновые режимы сервисы, т.е. 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
            }
...