С помощью Location API в сервисах Google Play приложение может запрашивать последнее известное местоположение устройства пользователя. В большинстве случаев вас интересует текущее местоположение пользователя, которое обычно совпадает с последним известным местоположением устройства.
В частности, используйте поставщика геоданных из нескольких источников, чтобы получить последнее известное местоположение устройства. Поставщик геоданных из нескольких источников – это один из Location API в сервисах Google Play. Он управляет базовой технологией определения местоположения и предоставляет API, позволяющий задавать требования на высоком уровне, например высокую точность или низкое энергопотребление. и оптимизирует энергопотребление.
В этом уроке показано, как сделать один запрос на определение местоположения устройства с помощью метода getLastLocation() в интегрированном поставщике данных о местоположении.
Как настроить сервисы Google Play
Чтобы получить доступ к поставщику геоданных из нескольких источников, в проект разработки приложения необходимо включить сервисы Google Play. Скачайте и установите компонент сервисов Google Play через SDK Manager и добавьте библиотеку в проект. Подробную информацию можно найти в руководстве Как настроить сервисы Google Play.
Как указать разрешения для приложения
Приложения, функции которых используют сервисы геолокации, должны запрашивать доступ к данным о местоположении в зависимости от того, как эти функции используются.
Создать клиента сервисов геолокации
В методе onCreate() своего объекта Activity создайте экземпляр клиента поставщика геоданных из нескольких источников, как показано в следующем фрагменте кода.
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Получение сведений о последнем известном местоположении
После создания клиента сервисов геолокации вы можете получить последнее известное местоположение устройства пользователя. Используйте метод getLastLocation() поставщика геоданных из нескольких источников, чтобы получить данные о местоположении устройства. Точность возвращаемых данных о местоположении определяется настройками разрешений, которые вы указали в манифесте приложения. Подробнее о том, как запрашивать разрешения на доступ к данным о местоположении…
Чтобы запросить последнее известное местоположение, вызовите метод getLastLocation().
В приведенном ниже фрагменте кода показан запрос и базовая обработка ответа.
fusedLocationClient.lastLocation .addOnSuccessListener { location: Location? -> // Got last known location. In some rare situations this can be null. }
Метод getLastLocation() возвращает объект Task, который можно использовать для получения объекта Location с координатами широты и долготы географического местоположения. Объект местоположения может быть null в следующих ситуациях:
- Геолокация отключена в настройках устройства. Результатом может быть
null, даже если последнее местоположение было получено ранее, поскольку при отключении геолокации также очищается кеш. - Устройство никогда не записывало свое местоположение. Это может быть новое устройство или устройство, на котором были восстановлены заводские настройки.
- Сервисы Google Play на устройстве были перезапущены, и нет активного клиента поставщика геоданных из нескольких источников, который запрашивал бы данные о местоположении после перезапуска. Чтобы избежать этого, вы можете создать новый клиент и самостоятельно запрашивать уведомления о местоположении. Подробнее о том, как запрашивать обновления местоположения…
Выберите наиболее точное местоположение
FusedLocationProviderClient предоставляет несколько методов получения геоданных устройства. Выберите один из следующих вариантов в зависимости от того, как используется ваше приложение:
getLastLocation()быстрее получает приблизительное местоположение и минимизирует расход заряда батареи, который может быть связан с вашим приложением. Однако геоданные могут быть устаревшими, если другие клиенты не использовали местоположение в последнее время.getCurrentLocation()получает более точные и актуальные данные о местоположении. Однако этот метод может привести к активному вычислению местоположения на устройстве.Это рекомендуемый способ получения актуального местоположения, когда это возможно, и он безопаснее, чем альтернативные варианты, такие как запуск и управление обновлениями местоположения самостоятельно с помощью
requestLocationUpdates(). Если ваше приложение вызывает методrequestLocationUpdates(), оно может потреблять много энергии, когда данные о местоположении недоступны или запрос не прекращается должным образом после получения новых данных.
Дополнительные ресурсы
Дополнительную информацию о получении текущего местоположения в Android можно найти в следующих материалах:
Образцы
- Пример приложения, демонстрирующий рекомендации по получению текущего местоположения.