Core Location — резервный вариант, кэширование местоположения и альтернативы

StackOverflow https://stackoverflow.com/questions/2564835

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня есть несколько вопросов по поводу Core Location.

1) Если пользователь откажет моему приложению в разрешении на использование основного местоположения или основное местоположение по какой-либо причине недоступно, есть ли запасной вариант?(Например, локаль устройства?)

2) Могу ли я кэшировать местоположение устройства в следующий раз?Core Location делает это сам?

3) Мне действительно нужно время заката в зоне пользователя в середине весеннего сезона, и у меня есть функция для этого, как только у меня будут широта и долгота устройства.Возможно, я могу просто сделать предположение о времени на основе локали?(Пример:Предположим, в США примерно 19:00.)

РЕДАКТИРОВАТЬ:

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

  • Проверьте доступность основного местоположения.Если да, используйте его и сохраните в NSUserPreferences.Если Core Location недоступно, перейдите к резервным вариантам.
  • Проверьте сохраненное местоположение.Если он хранится, используйте его.Если нет, продолжайте...
  • Проверьте выбранное пользователем время.
Это было полезно?

Решение

1) Строго говоря, если пользователь не разрешает использовать CoreLocation или если разрешение было дано, но CoreLocation недоступно, другого резервного варианта для получения местоположения пользователя в виде пары широты и долготы не существует.Использование локали может работать не во всех случаях.Во-первых, это просто даст вам приближение, которое может быть слишком далеко от реальности.Однако вам решать, подходит ли такое приближение для вашего приложения.Более того, некоторые пользователи используют локаль, отличную от той, которая относится к их стране.И у вас нет гарантии, что люди, путешествующие за границу, будут каждый раз корректировать дату/время.

2) Базовое местоположение по умолчанию кэширует последнее местоположение, полученное от устройства GPS.Однако для людей, путешествующих за границу, это кэшированное местоположение, безусловно, будет неверным (даже для людей, путешествующих всего в нескольких милях отсюда), и, как правило, вам следует каждый раз отбрасывать кэшированное значение и заново локализовать пользователя.Я понимаю, что для людей, путешествующих внутри своей страны, это (обычно) не создаст больших проблем.Но это зависит только от страны:путешествие по Италии не изменит время, но путешествие по США может изменить время до 3 часов.

3) Я бы предложил попробовать использовать Core Location и, в случае проблем, просто попросить пользователя ввести его/ее местное время или местоположение (города должно быть достаточно для ваших целей).Если вы решите запросить местоположение пользователя, вы сможете получить соответствующую пару широты и долготы, но для этого потребуется работающее сетевое подключение.

Другие советы

2) Из онлайн-документации для CLLocationManager:

Служба определения местоположения возвращает исходное местоположение как можно быстрее, возвращая кэшированную информацию, если она доступна.

Вы можете проверить временную метку CLLocation, чтобы узнать, кэшировано ли это значение или нет.

3) Если вы решите использовать локаль для первоначального приближения TZ, помните, что пользователи путешествуют и не могут быстро сбросить локаль.Вы можете получить текущий объект TZ с помощью:

[NSTimeZone localTimeZone]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top