Получить текущий адрес местоположения для приложения для Android

17

Мне не нужно отображать карту. Тем не менее, мне нужно использовать сеть gps / 3g, чтобы найти мои текущие позиции ADDRESS (не долго и лат), затем это будет добавлено к автоматизированному ответу sms, чтобы сообщить человеку, что я в настоящее время не могу ответить, & amp; укажите строковый адрес моего текущего местоположения. У меня есть работа sms, просто нужно выяснить способ доступа к gps и потянуть адрес. Я видел пример кода для lat / long. Возможно, мне нужно преобразовать lat / long в адрес в API карт google? Я не знаю, как это сделать. Любые советы / фрагменты кода / похожие учебники приветствуются! Благодарю. :)     

задан GrumP 17.02.2011 в 13:18
источник

3 ответа

25

Для этого есть два шага:

  1. Получить текущее местоположение - широта и amp; долгота, используя GPS, сеть, последнее известное местоположение и т. д. Android документация о местоположении содержит пример кода.

  2. Используйте класс Geocoder , чтобы запросить поиск для преобразования lat / долго до адреса (из которого вы можете легко извлечь город, страну, улицу и т. д.). В частности, вам нужно использовать метод getFromLocation ()

Примечание:

  • Метод getFromLocation () возвращает SET совпадений. В некоторых сценариях вы можете показать пользователю набор (скажем, 5) и позволить им выбрать лучший, или вы можете просто использовать первый, считая, что это лучше всего.
  • Помните, что оба этих вызова могут занять некоторое время. GPS / сеть может занять некоторое время, чтобы обеспечить местоположение. Аналогично, вызов getFromLocation () может занять некоторое время, так как он переходит через сеть в API Карт Google. Поэтому крайне важно, чтобы вы использовали обширную обработку ошибок для различных сценариев И что оба этих вызова перемещаются в отдельный поток, поэтому вы не блокируете пользовательский интерфейс приложения (смотрите в AsyncTask).
  • Бэкэнд класса Geocoder присутствует только на устройствах, одобренных Google. Таким образом, поиск будет в основном неудачным на любом устройстве, которое не имеет GMail / Market / Maps на нем.
ответ дан Ollie C 17.02.2011 в 13:44
источник
  • Спасибо. :) Знаете ли вы о каких-либо учебниках, которые облегчили бы его? Мне трудно понять. : - \ –  GrumP 17.02.2011 в 19:48
  • К сожалению, это довольно сложно. Я бы посоветовал вам сначала написать код, чтобы получить местоположение, затем сделать геокод, а затем после этого начать использовать asynctask, если вам нужна более высокая производительность. Код в ссылке выше - лучшее место для начала, поскольку он полностью объясняет все. Это просто вопрос времени чтения, кодирования, повторного чтения, отладки, пока вы не поймете это. –  Ollie C 17.02.2011 в 19:55
  • Олли, теперь может работать lat / long. Будет работать над попыткой конвертировать его в фактический адрес. Еще раз спасибо. :) –  GrumP 17.02.2011 в 22:51
  • Олли, наконец, получилось. Но, как вы упомянули, есть проблемы с производительностью. Благодаря действиям, выполняемым вместе с GPS и Интернетом, графический интерфейс приложения становится слабым. Насколько сложно обрабатывать обратное геокодирование в отдельном потоке, чтобы предотвратить блокировки? –  GrumP 22.02.2011 в 16:13
  • Читайте в AsyncTask, это делает его довольно простым. Самый простой способ - создать внутренний класс внутри вашей деятельности (подкласс AsyncTask) и переместить туда свой код. doInBackground () - это то, где вы помещаете вызов поиска имени, onPostExecute () - это то, где вы обновляете свой интерфейс. developer.android.com/reference/android/os/AsyncTask.html –  Ollie C 22.02.2011 в 17:10
14

Ответ здесь: Ссылка

Вам нужно создать объект Geocoder и вызвать getFromLocation(double latitude, double longitude, int maxResults)

Geocoder gCoder = new Geocoder(myContext);
ArrayList<Address> addresses = gCoder.getFromLocation(123456789, 123456789, 1);
if (addresses != null && addresses.size() > 0) {
    Toast.makeText(myContext, "country: " + addresses.get(0).getCountryName(), Toast.LENGTH_LONG).show();
}
    
ответ дан WarrenFaith 17.02.2011 в 13:43
источник
  • Спасибо, все это немного запутывает, но будет хорошо читать и видеть, если я получу где-нибудь :) –  GrumP 17.02.2011 в 19:49
  • На самом деле борется с этим. Я могу получить lat и long и напечатать его на экране. Я хочу напечатать адрес вместо этого. Может ли кто-нибудь показать мне, как создать объект геокодера и как повлиять на метод getFromLocation? Прочтите предоставленную ссылку, но полностью потеряйте atm. –  GrumP 21.02.2011 в 01:14
  • Я обновил свой ответ ... –  WarrenFaith 21.02.2011 в 02:02
  • Спасибо Уоррену. Очень благодарю за вашу помощь. :) Я не уверен, что должно быть где «myContext». «Длина не может быть разрешена или не является полем» также является ошибкой. Мой lat и long были добавлены к строке, называемой моими коордами, которая извлекается из другого класса методом get. Это еще более усложняет ситуацию. –  GrumP 21.02.2011 в 13:46
  • Если вы используете это внутри действия, вы можете использовать «this» в качестве контекста, потому что действие наследуется из контекста. В противном случае попробуйте найти соответствующий контекст где-нибудь. Длина была ошибкой и поддерживается только чистыми массивами. должен быть size (). –  WarrenFaith 21.02.2011 в 19:37
0

Как вы знаете, для получения адреса местоположения вы можете использовать google GeoCoder

кроме того, чтобы получить адреса местоположения, предоставив широту и долготу, вы можете использовать этот API. Это надежнее и быстрее, чем google Geocoder.Here я присоединяю ссылку и небольшой пример ...

URL-адрес API -

  

Ссылка

вы можете объединить значение широты и долготы рядом с равным знаком в URL-адресе.

example -

lat = 6.123456

lng = 79.123456

String url =

  

" Ссылка ", "+ lng";

это будет возвращать хороший jsonObject , и вы можете играть с ним, просто попробуйте это. В настоящее время я использую этот API для своих служб определения местоположения и его быстрее, чем обычно. geoCoder API. Чтобы поймать ответ json, вы можете использовать volley или что-то еще. Хорошее кодирование.

    
ответ дан Ashana.Jackol 21.08.2017 в 14:19
источник