Вы не можете просто «получить» местоположение в Android, так как оно может происходить из разных мест (последнее известное местоположение, GPS-приемник, местоположение в сети Wi-Fi или мобильная сеть передачи данных), и что более важно, это может занять время, чтобы получить местоположение, или вы можете не получить его вообще (например, GPS присутствует, но нет сигнала, как в помещении).
Тот факт, что получение местоположения может занять некоторое время, означает, что вы ДОЛЖНЫ запустить поиск местоположения в отдельном потоке, если только ранее не было кэшированного местоположения. В противном случае ваше приложение будет заблокировано до тех пор, пока местоположение не будет получено (что может никогда не произойти, например, на устройстве без GPS или геолокационной сети).
Это ключевая страница, которую вам нужно прочитать, переварить и использовать:
http://developer.android.com/guide/topics/location/obtaining-user-location.html
Если вы новичок в геолокации в Android, используйте код примера для начала.
То, что я узнал, добавляя географическое местоположение в приложения, это ...
- Никогда не предполагайте, что есть провайдеры местоположения. Устройство может не иметь сетевого подключения или GPS. Для обработки этих сценариев вам необходима обработка ошибок в коде.
- Всегда используйте потоки для гео-поиска, чтобы приложение реагировало
- Попробуйте использовать последнее известное местоположение Android, если это возможно, он обеспечивает быструю блокировку. Вы можете обновить местоположение на заднем плане до более точного.
- Если приложение может запускаться на устройствах, которые не могут определять географическое местоположение (например, более дешевые планшеты, Google TV и т. Д.), Сохраните местоположение в настройках, чтобы пользователь указывал его один раз, и оно будет использовать его при каждой загрузке приложения (если оно не могу найти новое местоположение)
- Часто имеет смысл создать класс специально для управления получением местоположений, многопоточностью и т. Д. Тогда другие классы в вашем приложении могут просто вызывать статический метод, как вы предлагаете, но проблема заключается в коде, который вы используете для получения значения в вашу переменную mLocation!
- Возможно, вы вообще не получите местоположение - не думайте, что у вас это получится, устройства и контексты различаются.
- Если вы НЕ ДОЛЖНЫ иметь очень точное местоположение, всегда используйте также поставщиков сетевых расположений, поскольку они часто бывают очень быстрыми. Поиск GPS-местоположения из свежих может быть очень медленным, и пользователи будут скучать и разочаровываться. Карты Google кажутся довольно быстрыми, но на самом деле они кешируют довольно мало информации, и вы увидите, что иногда найти новое местоположение медленно.
Я рекомендую электронные книги Марка Мерфи на Android, у него отличный охват и примеры исходного кода для геолокации http://commonsware.com/