Используя API определения местоположения сервисов Google Play, ваше приложение может запрашивать последнее известное местоположение устройства пользователя. В большинстве случаев вас интересует текущее местоположение пользователя, которое обычно совпадает с последним известным местоположением устройства.
В частности, используйте поставщик объединённого местоположения для получения последнего известного местоположения устройства. Поставщик объединённого местоположения — это один из API определения местоположения в сервисах Google Play. Он управляет базовой технологией определения местоположения и предоставляет простой API, позволяющий задавать требования высокого уровня, например, высокую точность или низкое энергопотребление. Он также оптимизирует расход заряда аккумулятора устройства.
Примечание: Когда ваше приложение работает в фоновом режиме, доступ к местоположению должен быть критически важным для основных функций приложения и сопровождаться надлежащим раскрытием информации пользователям.
 В этом уроке показано, как сделать один запрос на местоположение устройства с помощью метода getLastLocation() в поставщике объединенного местоположения.
Настройка сервисов Google Play
Для доступа к поставщику объединённого местоположения проект разработки вашего приложения должен включать сервисы Google Play. Загрузите и установите компонент сервисов Google Play через SDK Manager и добавьте библиотеку в свой проект. Подробнее см. в руководстве по настройке сервисов Google Play .
Укажите разрешения приложения
Приложения, функции которых используют службы определения местоположения, должны запрашивать разрешения на определение местоположения в зависимости от вариантов использования этих функций.
Создать клиент служб определения местоположения
 В методе onCreate() вашей активности создайте экземпляр Fused Location Provider Client, как показано в следующем фрагменте кода. 
Котлин
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Ява
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
Получить последнее известное местоположение
 После создания клиента служб определения местоположения вы можете получить последнее известное местоположение устройства пользователя. Когда ваше приложение подключено к этим службам, вы можете использовать метод getLastLocation() поставщика объединённого местоположения для получения местоположения устройства. Точность местоположения, возвращаемого этим вызовом, определяется настройками разрешений, указанными в манифесте приложения, как описано в руководстве по запросу разрешений на определение местоположения .
 Чтобы запросить последнее известное местоположение, вызовите метод getLastLocation() . Следующий фрагмент кода иллюстрирует запрос и простую обработку ответа: 
Котлин
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Ява
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
 Метод getLastLocation() возвращает Task , которую можно использовать для получения объекта Location с координатами широты и долготы географического местоположения. Объект Location может быть null в следующих ситуациях:
-  Определение местоположения отключено в настройках устройства. Результат может быть nullдаже если последнее местоположение было получено ранее, поскольку отключение определения местоположения также очищает кэш.
- Устройство не записало свое местоположение, что может быть связано с новым устройством или устройством, настройки которого были восстановлены до заводских.
- Сервисы Google Play на устройстве перезапущены, и нет активного клиента Fused Location Provider, который запросил бы данные о местоположении после перезапуска сервисов. Чтобы избежать этой ситуации, вы можете создать нового клиента и самостоятельно запрашивать обновления местоположения. Подробнее см. в разделе Запрос обновлений местоположения .
Выберите наилучшую оценку местоположения
 FusedLocationProviderClient предоставляет несколько методов для получения информации о местоположении устройства. Выберите один из следующих методов в зависимости от сценария использования вашего приложения:
-  getLastLocation()быстрее получает оценку местоположения и минимизирует расход заряда батареи, который можно списать на ваше приложение. Однако информация о местоположении может быть устаревшей, если другие клиенты в последнее время активно не использовали данные о местоположении.
- getCurrentLocation()позволяет получать более актуальное и точное местоположение более стабильно. Однако этот метод может привести к активному вычислению местоположения на устройстве.- Это рекомендуемый способ получения актуального местоположения, когда это возможно, и он безопаснее альтернатив, таких как самостоятельный запуск и управление обновлениями местоположения с помощью - requestLocationUpdates(). Если ваше приложение вызывает- requestLocationUpdates(), оно может иногда потреблять большое количество энергии, если местоположение недоступно или если запрос не был корректно остановлен после получения актуального местоположения.
Дополнительные ресурсы
Дополнительную информацию о получении текущего местоположения в Android можно найти в следующих материалах:
Образцы
- Пример приложения для демонстрации передового опыта при получении текущего местоположения.
