Как получить название города по широте и долготе в Android?

Как я могу получить путь к файлу из этого типа URI контента?

У вас нет, так как нет никакого файла вообще за Uri, не говоря уже о том, к которому вы можете получить доступ. Это Uri может указывать на:

  • Локальный файл на внешнем хранилище
  • Локальный файл на внутренней памяти для другого приложения
  • Локальный файл на съемном носителе
  • Локальный файл, который зашифрован и должен быть дешифрован на лету
  • Поток байтов, хранящихся в столбце BLOB в базе данных
  • Часть содержимого, которое должно быть загружено другим приложением первым
  • ... и т. д.

Все другие приложения, такие как Facebook, Google+ это делает

Нет, это не так. Они используют ContentResolver и:

  • openInputStream() для чтения в байтах, связанных с содержимым
  • getType(), чтобы получить тип MIME, связанный с содержимым
  • query() и OpenableColumns, чтобы получить размер и отображаемое имя, связанные с контентом
29
задан crickpatel0024 11 March 2014 в 11:34
поделиться

5 ответов

Используйте это:

 Geocoder geocoder = new Geocoder(this, Locale.getDefault());
 List<Address> addresses = geocoder.getFromLocation(MyLat, MyLong, 1);
 String cityName = addresses.get(0).getAddressLine(0);
 String stateName = addresses.get(0).getAddressLine(1);
 String countryName = addresses.get(0).getAddressLine(2);

. Более подробный пример карты Google можно найти по ссылкам ниже: http://www.demoadda.com/demo/android/load-googlemap_107

А также для фоновых обновлений местоположения: http://www.demoadda.com/demo/android/download-android-background-location-update-service-demo_21

65
ответ дан Kishan 11 March 2014 в 11:34
поделиться

Используйте геокодер. Передайте широту и долготу и получите название города и адрес.

try {

    Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault());
    List < Address > addresses = geo.getFromLocation(latitude, longitude, 1);
    if (addresses.isEmpty()) {
        addres.setText("Waiting for Location");
    } else {
        if (addresses.size() > 0) {
            addres.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
            //Toast.makeText(getApplicationContext(), "Address:- " + addresses.get(0).getFeatureName() + addresses.get(0).getAdminArea() + addresses.get(0).getLocality(), Toast.LENGTH_LONG).show();
        }
    }
} catch (Exception e) {
    e.printStackTrace(); // getFromLocation() may sometimes fail
}
2
ответ дан Phan Van Linh 11 March 2014 в 11:34
поделиться
gps = new LocationAddress(getActivity());
if (gps.canGetLocation()) {
  double latitude = gps.getLatitude();
  double longitude = gps.getLongitude();
  Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
  //List<Address> addresses =geocoder.getFromLocation(latitude, longitude, 1);

  try {
    List < Address > addresses = geocoder.getFromLocation(latitude, longitude, 1);
    String address = addresses.get(0).getSubLocality();
    String cityName = addresses.get(0).getLocality();
    String stateName = addresses.get(0).getAdminArea();
    txt_paddress.setText(address);
    txt_city.setText(cityName);
    txt_state.setText(stateName);

  } catch (IOException e) {
    e.printStackTrace();
  }
} else {
  gps.showSettingsAlert();
}
9
ответ дан Phan Van Linh 11 March 2014 в 11:34
поделиться

В onClick добавить это:

Geocoder gcd = new Geocoder(AndroidGPSTrackingActivity.this, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
if (addresses.size() > 0) 
    System.out.println(addresses.get(0).getLocality());
20
ответ дан Mayank Saini 11 March 2014 в 11:34
поделиться

Для моей страны (Вьетнам) getLocality вернет ноль, а addresses.get(0).getAddressLine(0) вернет район, а не город

Так что я буду делать так

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

int maxAddressLine = addresses.get(0).getMaxAddressLineIndex();

String countryName = addresses.get(0).getAddressLine(maxAddressLine);
String stateName = addresses.get(0).getAddressLine(maxAddressLine-1);
String cityName = addresses.get(0).getAddressLine(maxAddressLine-2);
1
ответ дан Phan Van Linh 11 March 2014 в 11:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: