How to get complete address from latitude and longitude?

前端 未结 21 2157
深忆病人
深忆病人 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:47

    1 - You create variables for LocationManager and LocationListener in onCreate method.

    2 - Check if there is a permission so execute the location updates and get lastKnownLocation from locationManager else you ask for permission

    3 - Create onRequestPermissionResult in main class and check if there is a permission then execute the location updates

    4 - Create separated method which includes Geocoder variable and create a list to put the coordinates from your location, so to be safe you check if the List is exist and if each info we want in that list is exist, then you use (getThoroughfare ==> for Street Address), (getLocality ==> for City / State), (getPostalCode ==> for Zip), (getAdminArea ==> for Complete Address)

    5 - Finally you call that method after checking the permission with (lastKnownLocation parameter ==> to show address when the App runs) and in onLocationChanged with (location parameter ==> to show address when location changes)

    Code part:

    LocationManager locationManager;
    
    LocationListener locationListener;
    
    @SuppressLint("MissingPermission")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.activity_main);
    
        locationManager  = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    
        locationListener = new LocationListener() {
    
            @Override
            public void onLocationChanged(Location location) {
    
                updateLocation(location);
    
            }
            @Override public void onStatusChanged(String provider, int status, Bundle extras) {
    
            }
            @Override
            public void onProviderEnabled(String provider) {
            }
            @Override
            public void onProviderDisabled(String provider) {
            }
        };
    
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
    
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    
            Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    
            updateLocation(lastKnownLocation);
    
        }else {
    
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
    
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
    
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
            }
        }
    }
    
    
    public void updateLocation ( Location location){
    
    
        Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
        try {
            List
    listAddresses = geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1); String address = "Could not find location :("; if (listAddresses != null && listAddresses.size() > 0) { if (listAddresses.get(0).getThoroughfare() != null) { address = listAddresses.get(0).getThoroughfare() + " "; } if (listAddresses.get(0).getLocality() != null) { address += listAddresses.get(0).getLocality() + " "; } if (listAddresses.get(0).getPostalCode() != null) { address += listAddresses.get(0).getPostalCode() + " "; } if (listAddresses.get(0).getAdminArea() != null) { address += listAddresses.get(0).getAdminArea(); } } Log.i("Address",address); } catch (Exception e) { e.printStackTrace(); } } }

提交回复
热议问题