Альтернатива для начала МониторингSignificantLocationChanges? - PullRequest
4 голосов
/ 03 февраля 2011

Я в некоторой степени новичок в разработке приложений для iPhone, но я пытаюсь создать приложение, которое в основном обновляет ваше местоположение каждый раз, когда оно не на переднем плане, чтобы я мог затем отобразить, где находился человек, когда он / она запускает приложение. Я думал, что мог бы использовать startMonitoringSignificantLocationChange, потому что это работает, когда приложение находится в фоновом режиме, но оказывается, что это очень неточно. Я действительно хотел бы иметь возможность установить временной интервал, поэтому, например, каждые 10 минут местоположение будет обновляться, но я понятия не имею, как это сделать. Есть идеи?

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

Прочитайте фоновую документацию о расположении на сайте Apple здесь

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

AnПриложение может объявить себя нуждающимся в постоянных фоновых обновлениях местоположения.Приложение, которому требуются регулярные обновления местоположения, как на переднем, так и на заднем плане, должно добавить ключ UIBackgroundModes в свой файл Info.plist и установить значение этого ключа в массив, содержащий строку местоположения.Этот параметр предназначен для приложений, которые предоставляют определенные услуги, такие как навигационные услуги, которые включают постоянное информирование пользователя о его или ее местонахождении.Наличие ключа в файле Info.plist приложения сообщает системе, что оно должно позволять приложению запускаться по мере необходимости в фоновом режиме.

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

ОДНАКО .Вы говорите, что хотите получать обновления каждые 10 минут или около того.В этом случае вам лучше НЕ использовать эту стратегию, а вместо этого использовать значительные обновления местоположения.Они будут перезапускать ваше приложение, если оно закрыто, но, как вы говорите, они не очень точны.Хитрость в их улучшении состоит в том, чтобы запускать обычные обновления местоположения, как только приложение получает значительное обновление местоположения, и у вас должно быть достаточно времени для этого, чтобы улучшить свое местоположение (отправив вам еще несколько обновлений), прежде чем приложение снова будет приостановлено.

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

3 голосов
/ 09 июня 2011

Вы можете просто использовать startUpdatingLocation, но просто убедитесь, что установлены свойства CLLocationManager:

  1. Используйте distanceFilter с умом: вместо проверки обновлений местоположения каждыйX минут, просто сообщите менеджеру местоположения, чтобы он обновлял вас каждые 200/300 метров (зависит от того, идет ли ваш пользователь пешком или за рулем).

  2. desiredAccuracy также должны быть установлены примерно на 100 метров (посмотрите на константы, объявленные в заголовочных файлах), чтобы ваше приложение не разряжало батарею ..

Ваше приложение не будет перезапущено, если оно будет убито, но до тех пор, пока оно остается в фоновом режиме, оно (то есть делегат менеджера расположений) будет продолжать получать locationManager:didUpdateToLocation:fromLocation:.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...