2015-09-03 5 views
-2

Я работал в приложении отслеживания местоположений iOS, и мы нашли способ определить, когда пользователи покидают место, но мы делаем это, постоянно слушая местоположение обновления, которые заканчиваются истощением нашей батареи.iOS CoreLocation, Определить пользователя, покидающего местоположение

Каков наиболее эффективный способ сделать что-то подобное? я хотел бы получить потребление батареи, похожее на приложение напоминаний.

Любая идея приветствуется!

Спасибо!

+0

Вы можете использовать свойство desiredAccuracy –

ответ

0

Это зависит от вашего определения «оставляя место». Но вы можете использовать

func startMonitoringSignificantLocationChanges() 

На CLLocationManager для того, чтобы получать уведомления (примерно), когда пользователь перемещает 500 метров или более, according to Apple documention.

Это перекладывает ответственность наблюдать жизнь батареи к коду Apple, который, как вы можете себе представить, хорошо оптимизированы для этой задачи.

1

Вам необходимо настроить приложение для использования геозондов.

Метод, который вы хотите посмотреть, это метод CLLocationManager startMonitoringForRegion. Вам необходимо настроить приложение, чтобы попросить пользователя получить разрешение на мониторинг обновлений местоположения.

Система запустит ваше приложение, чтобы доставить обновление региона, если оно не работает.

-1

Следуйте за функцией @ rschmidt для обновления исходного местоположения на устройстве. Отслеживать текущую локализацию пользователя, сохраняя переменную с именем currentLocality в классе, который делегирует CLLocationManager.

Реализовать CLLocationManagerDelegate следующим образом

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 

    var currentLocation = locations.last as? CLLocation 

    // Getting current locality with GeoCoder 
    CLGeocoder().reverseGeocodeLocation(currentLocation, completionHandler: {(placemarks, error) in 
      if (error != nil) { 
       println("reverse geodcode fail: \(error.localizedDescription)") 
      } 
      else { 
        let placeMark = placemarks.last as? CLPlacemark 
        if let latestLocality = placeMark!.locality { 
         if latestLocality != currentLocality { 
         // Locality has been changed, do necessary actions 

         // Updating current locality 
         currentLocality = latestLocality 
         } 

        } 
      } 
     }) 

} 
Смежные вопросы