2013-04-28 1 views
2

Я пытаюсь получить щелкнутый адрес на карте Google с помощью onMapLongClickListener (точка LatLng), используя lat и lng точки и преобразовывая их в адрес с помощью Geocoder. Он работает нормально, если я подключен к Интернет, но если я не приложение, произойдет сбой, потому что метод getFromLocation дает нулевой результат. Итак, я полагаю, что класс Geocoder работает только с подключением. Это так? И есть ли способ, чтобы адрес оставался в автономном режиме?Работает ли Android Geocoder только с подключением к Интернету?

Вот код метода:

public void onMapLongClick(LatLng point) { 
      List<Address> addresses = null; 
      try { 
       addresses = geocoder.getFromLocation(point.latitude, point.longitude, 1); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      String address = addresses.get(0).getAddressLine(0); 
      String city = addresses.get(0).getAddressLine(1); 
      String country = addresses.get(0).getAddressLine(2); 
      String str = address + ", " + city + ", " + country; 
      gMap.addMarker(new MarkerOptions() 
      .position(point) 
      .title("Clicked Point") 
      .draggable(false) 
      .snippet(address + ", " + city + ", " + country)); 
      Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      v.vibrate(50); 
     }  

И это разрешения:

<uses-permission android:name="com.example.mappine.permission.MAPS_RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
+0

Я уверен, что кто-то где-то предлагает автономную базу геокодирования, но кто-то не Google, и их продукт, вероятно, не является бесплатным. –

+0

API геокодирования Google свободен от условий (см. [Здесь] (https://developers.google.com/maps/documentation/geocoding/)). – 2015-06-11 09:19:40

ответ

10

Да. Знаете ли вы, сколько данных требуется для полного геокодера? Вы не храните это на мобильном телефоне.

+0

Геокодеру необходимо сопоставить все адреса в мире (или, по крайней мере, область, используемую приложением), в координаты долготы и широты. Это много данных. – Kevin

+0

И все же поставщики геокода, такие как TomTom, Navigon и т. Д., Сделали это, объединив автономные геокодированные данные с их приложениями Android и установив их на устройства Android. Я не вижу, что такое суета с автономными геокодированными данными. Использование обратного геокодирования с подключением к Интернету является только жизнеспособным для тех, кто находится в больших планах данных. Те, кто находится в ограниченных планах данных, будут лучше с опцией офлайн-данных. – 2015-06-11 09:14:18

+0

Сделка - это три вещи. Во-первых, он занимает много места для любой реальной степени точности - мы говорим о концертах. У вас есть ограниченное подмножество в этих приложениях. Во-вторых, версии с точной загрузкой не обновляются. В-третьих, он спросил о конкретном геокодере. У этого нет автономного режима. Если вы хотите его предоставить, вам придется использовать другую услугу, а не Google. –