How to get complete address from latitude and longitude?

前端 未结 21 2398
深忆病人
深忆病人 2020-11-22 09:07

I want to get following values from Latitude and Longitude in android

  1. Street Address
  2. City / State
  3. Zip
  4. Complete Address
<
21条回答
  •  执笔经年
    2020-11-22 09:41

    It seems that no-one has yet provided the solution suggested by Google Docs (https://developer.android.com/training/location/display-address#java). The correct solution should use an IntentService to make the network call for reverse geocoding.

    An intent service is used rather than an AsyncTask as it is not tied to any specific activity. ie. it has its own lifecycle. The IntentService will stop itself when the Geocoding is finished.

    public class GeocodingService extends IntentService {
    
        public GeocodingService() {
            super("GeocodingService");
        }
    
    
        @Override
        protected void onHandleIntent(@Nullable Intent intent) {
            if (intent == null) {
                return;
            }
    
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
            String errorMessage = "";
            BCCDatabase BCCDatabase = skicompanion.skicompanion.storage.BCCDatabase.getInstance(getApplicationContext());
    
            // Get the location passed to this service through an extra.
            Location location = intent.getParcelableExtra(
                    "location");
            long trackID = intent.getLongExtra("trackID", -1);
    
            List
    addresses = null; String addressString = ""; try { addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); } catch (IOException ioException) { // Catch network or other I/O problems. errorMessage = "service not available"; Log.d(Constants.SkiCompanionDebug, errorMessage, ioException); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. errorMessage = "invalid lat long used"; Log.d(Constants.SkiCompanionDebug, errorMessage + ". " + "Latitude = " + location.getLatitude() + ", Longitude = " + location.getLongitude(), illegalArgumentException); } // Handle case where no address was found. if (addresses == null || addresses.size() == 0) { if (errorMessage.isEmpty()) { errorMessage = "no address found"; Log.d(Constants.SkiCompanionDebug, errorMessage); } } else { if(addresses.get(0).getLocality() != null){ addressString += addresses.get(0).getLocality() + ", "; } if(addresses.get(0).getAdminArea() != null){ addressString += addresses.get(0).getAdminArea() + ", "; } if(addresses.get(0).getCountryName() != null){ addressString += addresses.get(0).getCountryName(); } //updating DB BCCDatabase.setTrackLocation(trackID, addressString); Log.d(Constants.SkiCompanionDebug, "address found: "+ addressString); } } }

提交回复
热议问题