Почему фон службы определения местоположения не работает, если вызвать LocationManager от Button_Action swift - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть сомнения по поводу фоновой службы определения местоположения, если мы вызываем менеджер местоположения в viewDidload, мы можем управлять местоположением вызова, когда приложение завершит работу, если мы знаем местоположение, запущенное с помощью push-уведомления

Я установлен info.plist Готово, импортировать все, что я думаю, это использовать местоположение и центр уведомлений.

override func viewDidLoad() {
    super.viewDidLoad()
    locationManager.allowsBackgroundLocationUpdates = true
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     if(!gpsEnable) {
         print("update disable")
         return
     }
     print("update enable")
     for location in locations {
         processLocation(location)
     }
 }  

Но если вызов по кнопке не работает, когда приложение завершится

@IBAction func location(_ sender: Any) {
    locationManager.allowsBackgroundLocationUpdates = true
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
    locationManager.startUpdatingLocation()
}

Я ожидаю, чтоПоводом для работы не может быть названо местоположение, в котором работает ViewDidload.

Я не очень хорошо говорю по-английски, спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

ОБНОВЛЕНИЕ

Я знаю процесс, почему не работает, когда не вызывать в viewDidload, если приложение завершится

, если вы когда-либо проектировали вести журнал данных о местоположении, когда приложение будет завершено, то местоположение будеттекущее обновление местоположения при перемещении до текущего местоположения, когда вы меняете и вызываете метод LocationUpdate или CLVisit или CLLocationChange и другого, которого вы знаете, в вашем проекте.

ok.

Первый

Вы должны вызвать это в вашем контроллере представления в проекте:

переопределить func viewDidLoad () {

super.viewDidLoad()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()

}

, если вы не вызываете этот менеджер местоположений (местоположениеобновление) это не будет работать, когда вы убьете приложение.

Обычно, когда вы убиваете приложение, мы должны переместиться на позицию смены местоположения, тогда в вашем проекте начнется рабочий процесс locationUpdate или, если вы хотите знать, теперь вы можете включить сновав конфиденциальности Расположение

enter image description here

Второе

Обновление местоположения условия, если приложение будет Terminate, когда функция должна вызывать использование в ViewDidLoad только в первом ViewController.

, если вы спросите меня, почему это работает только в ViewController.

Я отвечу: «Не знаю, но мы тестируемдля процесса в моем приложении до тех пор, пока процесс не узнает, что процесс запускается именно в первом ViewController в ViewDidLoad, ViewWillAppear, ViewDidAppear ".

.SecondView

мы тестируем процесс по виду в корневом представлении, да, это первый вид, когда я вызываю менеджер местоположений в представлении

переопределяем func viewDidLoad () {

    super.viewDidLoad()

     locationManager.allowsBackgroundLocationUpdates = true
       locationManager.delegate = self
     locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
   locationManager.startUpdatingLocation()
   NotificationStatic.shared.showNotification(title:"viewDidload01",body:"did load",identifierRequest : "view1")

}

когда процесс входит в viewDidload, процесс может запускать процесс при обновлении местоположения, когда приложение завершает работу

Но вы вызываете менеджер местоположений во SecondView, но в RootView не вызываете местоположение, это будет работать !!

если вы когда-либо выполняете SecondView, то в SecondView -> запускаете ViewDidload (есть менеджер местоположений), затем убиваете приложение, затем снова открываете службу определения местоположения.вызовите метод использования менеджера местоположения, но он не может получить журнал местоположения, потому что в RootView (первый контроллер представления) нет функции об обновлении местоположения в viewDidload

заключение

в процессе обслуживания местоположенияв фоновом режиме это будет работать только в процессах ViewDidload, ViewWillAppear, ViewDidAppear в первом контроллере представления приложения

Я новичок в навыках описания и разговорной речи новичков на английском языке, спасибо.

...