Подтвердить что ты не робот

IPhone Разработка GPS - Советы + Трюки

Я ищу некоторые отзывы, ссылки в блогах и т.д., которые предлагают несколько советов и трюков для разработки iPhone GPS. Я прочитал и понял API, у меня есть демо-приложение и работает, и т.д., Но я столкнулся с некоторыми "причудами" с gps на iphone. Например, кажется, что вы получите гораздо меньше обновлений местоположения, когда ваш iphone переходит в режим энергосбережения. Я читал, что вы можете бороться с этим, играя музыку в своем приложении [не уверен, что это правда].

Также кажется, что, чтобы сделать разумный шагомер, вы должны отфильтровать любое показание с горизонтальной точностью менее 20 метров. Правильно ли это звучит?

Есть ли какой-либо контрольный список в Интернете для iphone gps gotchas?

Спасибо заранее.

4b9b3361

Ответ 1

Я не знаю какого-либо конкретного списка, но вот несколько вещей, которые вы должны иметь в виду:

  • Вы не занимаетесь поиском GPS. Вы выполняете поиск по ключевым местам. Основное местоположение может или не может получать информацию от GPS. Многие люди по-прежнему используют pre-3g iPhones, у которых нет GPS, и даже на телефоне 3g GPS может быть недоступен во многих случаях (например, если человек находится в помещении). В этих случаях телефон попытается выполнить триангуляцию на основе сотовых телефонов, а Core Location вернет результат. Это будет гораздо менее точный, чем GPS.
  • Основное местоположение будет кэшировать данные. Первое чтение, которое он предоставляет вашему приложению, скорее всего, будет старым чтением, которое может быть или не быть точным, в зависимости от того, перемещен ли телефон. Обязательно проверяйте временную метку любого местоположения и посмотрите, было ли это до начала вашего приложения.
  • Я не знаю, что вы подразумеваете под режимом "энергосбережения", но если вы думаете, когда экран заблокирован/выключен, это не остановит работу Core Location, если ваше приложение все еще работает. Напротив, легко разрядить аккумулятор телефона намного быстрее, чем можно было бы ожидать, если бы вы заблокировали телефон, когда приложение, использующее Core Location, работает, потому что телефон продолжит обновлять приложение, поскольку новые данные о местоположении доступны. Вы можете избежать этого в своем приложении, прослушивая UIApplicationWillResignActiveNotification для обнаружения блокировки экрана и UIApplicationDidBecomeActiveNotification для обнаружения разблокировки.
  • Для получения более высоких результатов потребуется больше времени, потому что чем дольше вы будете ждать, тем лучше результаты, до предела. Если вы решите, что вам нужно быть в пределах N метров, подумайте, сколько времени может понадобиться пользователю, чтобы он стоял там, ожидая, когда телефон будет находиться на своем месте.

Насколько 20 метров достаточно точны, вы можете только ответить, исходя из того, как вы ожидаете, что ваше приложение будет использоваться. Проверьте приложение и посмотрите, работает ли он так, как вы хотите, чтобы он работал.

Ответ 2

У Тома был отличный ответ (я хотел особо отметить, что обычный возврат первого значения может быть более старым кэшированным местоположением), но мне пришлось добавить еще несколько вещей:

  • Вы можете сказать менеджеру местоположений остановиться и начать снова, если вы хотите заставить его выпустить хотя бы еще одно обновление местоположения.
  • Если вы не знали, есть удобные методы в CLLocation, чтобы дать вам расстояние между двумя местоположениями.
  • В качестве примечания к документам вы должны реализовать locationManager: didFailWithError: даже если вам не нужно (хотя бы для остановки обновлений диспетчера местоположений за какое-то время).
  • Проверьте тщательно сценарии, в которых пользователь запрещает обновление местоположения для вашего приложения!
  • Очень, очень редко вы можете получать обновления из строя (т.е. вы получаете более точное местоположение, за которым следует несколько менее точная дата, ранее датированная).
  • Симулятор даст вам обновление местоположения, но всегда будет сообщать о вашем местонахождении в штаб-квартире Apple.