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

Я хочу указать название города по текущему местоположению, но у меня есть широта и долгота. Как его получить? я использовал нажатие кнопки, затем я получил двойное значение широты и долготы. мой код ниже. пожалуйста, помогите мне.

Спасибо !!

Button btnShowLocation;

    GPSTracker gps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);

        // show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {       
                // create class object
                gps = new GPSTracker(AndroidGPSTrackingActivity.this);

                // check if GPS enabled     
                if(gps.canGetLocation()){

                    double latitude = gps.getLatitude();
                    double longitude = gps.getLongitude();

                    // \n is for new line
                    Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();    
                }else{

                    gps.showSettingsAlert();
                }

            }
        });

Я отредактировал приведенный ниже код, но не получил название города, пожалуйста, помогите мне! ]

03-11 17:01:46.465: W/System.err(27587): java.io.IOException: Service not Available
03-11 17:01:46.465: W/System.err(27587):    at android.location.Geocoder.getFromLocation(Geocoder.java:136)
03-11 17:01:46.465: W/System.err(27587):    at com.example.gpstracking.AndroidGPSTrackingActivity$1.onClick(AndroidGPSTrackingActivity.java:81)
03-11 17:01:46.465: W/System.err(27587):    at android.view.View.performClick(View.java:4191)
03-11 17:01:46.475: W/System.err(27587):    at android.view.View$PerformClick.run(View.java:17229)
03-11 17:01:46.475: W/System.err(27587):    at android.os.Handler.handleCallback(Handler.java:615)
03-11 17:01:46.475: W/System.err(27587):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-11 17:01:46.475: W/System.err(27587):    at android.os.Looper.loop(Looper.java:137)
03-11 17:01:46.475: W/System.err(27587):    at android.app.ActivityThread.main(ActivityThread.java:4960)
03-11 17:01:46.475: W/System.err(27587):    at java.lang.reflect.Method.invokeNative(Native Method)
03-11 17:01:46.475: W/System.err(27587):    at java.lang.reflect.Method.invoke(Method.java:511)
03-11 17:01:46.475: W/System.err(27587):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
03-11 17:01:46.475: W/System.err(27587):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
03-11 17:01:46.475: W/System.err(27587):    at dalvik.system.NativeStart.main(Native Method)
03-11 17:02:21.335: W/IInputConnectionWrapper(27587): getSelectedText on inactive InputConnection
03-11 17:02:21.335: W/IInputConnectionWrapper(27587): setComposingText on inactive InputConnection
03-11 17:02:21.425: W/IInputConnectionWrapper(27587): getExtractedText on inactive InputConnection
30
задан 15.05.2020, 20:50

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
ответ дан 15.05.2020, 20:53
  • 1
    Это только соответствовало бы одной вещи за один раз, тогда как I' d предпочитают указывать на все строки, которые являются дубликатами других строк внезапно. Хорошая функция, хотя, кажется удобной. – Brian Carper 18.08.2009, 09:37

В 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());
23
ответ дан 15.05.2020, 20:51
  • 1
    Шанс мы могли получить некоторый код? – technomalogical 14.08.2009, 05:25
  • 2
    я don' t добираются, it.i использовал Ваш код. – crickpatel0024 15.05.2020, 20:51
  • 3
    Зарегистрируйте свою широту и долготу и проверку, если они прибывают 0. – Mayank Saini 15.05.2020, 20:51
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
ответ дан 15.05.2020, 20:51
  • 1
    Это только обнаружит смежные дублирующиеся строки и только отметит первую копию, не второе. – rampion 14.08.2009, 03:20

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

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
ответ дан 15.05.2020, 20:52
  • 1
    Вы правы. Я попробовал еще раз. – Zsolt Botykai 14.08.2009, 10:12

Для моей страны (Вьетнам) 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
ответ дан 15.05.2020, 20:52
  • 1
    Паоло спасибо, Это работало обработка! – Matthew James Taylor 24.05.2009, 20:20

Теги

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