Я не думаю, что вы можете просто сделать один звонок и получить определение местоположения. GPS / Android просто не работает таким образом. Телефон может иметь последнее известное местоположение, но это последнее известное местоположение, возможно, было снято / записано несколько часов назад и за несколько миль. Местоположение, возвращаемое методом getLastKnownLocation (), имеет отметку времени и точность, которую можно использовать для определения того, достаточно ли это местоположение.
Местоположения обычно определяются путем настройки прослушивателя, прослушивания обновлений и остановки прослушивателя, когда у вас есть достаточно хорошее исправление. См. Получение пользовательского местоположения для хорошего примера, особенно подробности в примере - метод isBetterLocation ().
Я считаю, что лучше всего создать асинхронную задачу, которая будет активно регистрировать и отменять регистрацию приемников GPS / сети / пассивных прослушивателей в зависимости от того, имеет ли приложение достаточно хорошее местоположение или нет, и иметь этот класс для экспорта метода getMyPosition (), который возвращает Объект местоположения, если была установлена достаточно хорошая позиция, или ноль, если нет. Тогда основной код может сделать простой однострочный вызов функции, чтобы получить текущую позицию. Но только потому, что за кулисами за кадром выполняется асинхронная задача.
Я пытаюсь сделать свою задачу асинхронной активной отмены регистрации прослушивателя GPS и отключить схемы GPS для экономии заряда батареи, когда у меня есть достаточно хорошее решение. Как долго я отключаю слушателей, зависит от потребностей приложения. Оставление пассивного прослушивателя оставленным (зарегистрированным) позволяет моей задаче / приложению прослушивать отчеты о местоположении GPS, вызванные любым другим приложением на устройстве, «бесплатно».
Получение достаточно хорошей позиции - это не сделка с одним вызовом функции, если только вы не сделаете это с большим количеством закулисной работы.