Вам не хватает работы GPS-приемников.
Когда нет приложения, использующего точное местоположение, все смартфоны отключают приемник GPS для экономии заряда батареи.
Даже если вы выбрали службы определения местоположения чтобы быть включенным (в настройках), вы заметите, что в панели уведомлений значок для использования GPS присутствует, только когда приложение активно, например, Google Maps или тестовое приложение GPS.
После включения приемника ( потому что это требуется некоторым приложениям), для «исправления» требуется некоторое время - доступно точное измерение местоположения.
Сколько времени потребуется, чтобы получить исправление, зависит от нескольких факторов, включая условия окружающей среды и тип вашего телефона. время и расстояние с момента последнего точного исправления и т. д. c.
Это может занять от нескольких секунд до нескольких минут.
Итак, что вы должны сделать, это подписаться на местоположение, как только когда ваше приложение открыто, и просите получать его как можно чаще.
Затем, включите кнопку только тогда, когда у вас будет хорошая точность, и когда кнопка нажата, покажите последний результат.
Вы, вероятно, должны также отобразить какой-нибудь счетчик или сообщение пользователю, ожидая точного исправления, чтобы пользователь знал, что ваше приложение не застряло.
Редактировать : под «подпиской» я имею в виду зарегистрировать необходимый обратный вызов, чтобы ваше приложение получало местоположение из системы, когда оно будет готово.
Как это сделать, зависит от того, какой API вы используете выберите.
В документации Google нет ошибок. Если вы решите использовать объединенное местоположение, вам нужно будет сделать следующее:
Создать объект запроса местоположения и установить приоритет для PRIORITY_HIGH_ACCURACY
, а также setInterval
и setFastestInterval
для 1000 (1 секунда), чтобы получить лучшую точность.
Получить FusedLocationProviderClient
объект из LocationServices
Используйте клиент для регистрации обратный вызов в ваше приложение
Здесь приведены примеры кодов: https://developer.android.com/training/location/request-updates
В функции обратного вызова в вашем приложении вы можете проверить точность и если это достаточно для вас, активируйте кнопку и сохраните местоположение, чтобы вы могли отобразить его пользователю, когда он нажмет кнопку.