Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从经纬度获取完整地址?_Android_Google Maps_Location - Fatal编程技术网

Android 如何从经纬度获取完整地址?

Android 如何从经纬度获取完整地址?,android,google-maps,location,Android,Google Maps,Location,我想在android中从纬度和经度获得以下值 街道地址 城市/州 拉链 完整地址 如何实现这一点?您正在寻找术语地理编码 简短的故事是你需要做: Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); Geocoder-Geocoder=new-Geocoder(这个,Locale.get

我想在android中从纬度和经度获得以下值

  • 街道地址
  • 城市/州
  • 拉链
  • 完整地址

  • 如何实现这一点?

    您正在寻找术语地理编码

    简短的故事是你需要做:

    Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
    
    Geocoder-Geocoder=new-Geocoder(这个,Locale.getDefault());
    列表。

    地理编码器地理编码器;
    List

    Geocoder-Geocoder=newgeocoder(mContext,Locale.getDefault());
    //从输入参数列表中获取当前位置
    位置loc=参数[0];
    //创建包含结果地址的列表
    列表地址=空;
    试一试{
    地址=geocoder.getFromLocation(loc.getLatitude(),
    loc.getLongitude(),10);
    }捕获(IOE1异常){
    Log.e(“LocationSampleActivity”,“getFromLocation()中的IO异常”);
    e1.printStackTrace();
    }捕获(IllegalArgumentException e2){
    //要在日志中发布的错误消息
    String errorString=“非法参数”+
    Double.toString(loc.getLatitude())+
    " , " +
    Double.toString(loc.getLongitude())+
    “传递到地址服务”;
    Log.e(“LocationSampleActivity”,errorString);
    e2.printStackTrace();
    }
    地址=空;
    字符串zip=null;
    字符串city=null;
    字符串状态=null;
    StringBuffer st=新的StringBuffer();
    //如果反向地理代码返回一个地址
    if(addresses!=null&&addresses.size()>0){
    字符串add=address.get(0).getAddressLine(0)+“
    +地址。get(0)。getSubAdminArea()+“,”
    +addresses.get(0.getSubLocality();
    city=addresses.get(0.getLocation();
    state=addresses.get(0.getAdminArea();
    //获取第一个地址
    对于(int i=0;i试试这个,我的朋友

     private String getCompleteAddressString(double LATITUDE, double LONGITUDE) {
                String strAdd = "";
                Geocoder geocoder = new Geocoder(this, Locale.getDefault());
                try {
                    List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);
                    if (addresses != null) {
                        Address returnedAddress = addresses.get(0);
                        StringBuilder strReturnedAddress = new StringBuilder("");
    
                        for (int i = 0; i <= returnedAddress.getMaxAddressLineIndex(); i++) {
                            strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
                        }
                        strAdd = strReturnedAddress.toString();
                        Log.w("My Current loction address", strReturnedAddress.toString());
                    } else {
                        Log.w("My Current loction address", "No Address returned!");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.w("My Current loction address", "Canont get Address!");
                }
                return strAdd;
            }
    
    私有字符串getCompleteAddressString(双纬度,双经度){
    字符串strAdd=“”;
    Geocoder Geocoder=新的Geocoder(这个,Locale.getDefault());
    试一试{
    列表地址=geocoder.getFromLocation(纬度,经度,1);
    如果(地址!=null){
    返回的地址地址=地址。获取(0);
    StringBuilder strReturnedAddress=新StringBuilder(“”);
    
    对于(int i=0;i城市和国家,地址行1和行2不一定都是

    例如

    所以

    Geocoder-Geocoder=new-Geocoder(context,Locale.getDefault());
    列表地址=geocoder.getFromLocation(纬度,经度,1);
    字符串地址=地址.get(0).getAddressLine(0);
    字符串city=addresses.get(0.getLocation();
    字符串状态=addresses.get(0.getAdminArea();
    字符串zip=addresses.get(0.getPostalCode();
    字符串country=addresses.get(0.getCountryName();
    
    在onCreate()中..

    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, true);
        Location location = locationManager.getLastKnownLocation(bestProvider);
    
        if (location == null) {
            Toast.makeText(getApplicationContext(), "GPS signal not found",
                    3000).show();
        }
        if (location != null) {
            Log.e("location", "location--" + location);
            Log.e("latitude at beginning",
                    "@@@@@@@@@@@@@@@" + location.getLatitude());
            onLocationChanged(location);
        }
    
    在onLocationChanged()中编写代码。

    @覆盖
    已更改位置上的公共无效(位置){
    地理编码器;
    列出地址;
    geocoder=新的geocoder(这个,Locale.getDefault());
    纬度=位置。getLatitude();
    longitude=location.getLongitude();
    Log.e(“纬度”、“纬度--”+纬度);
    试一试{
    Log.e(“纬度”,“内纬度--”+纬度);
    地址=地理编码器.getFromLocation(纬度,经度,1);
    if(addresses!=null&&addresses.size()>0){
    字符串地址=地址.get(0).getAddressLine(0);
    字符串city=addresses.get(0.getLocation();
    字符串状态=addresses.get(0.getAdminArea();
    字符串country=addresses.get(0.getCountryName();
    字符串postalCode=addresses.get(0.getPostalCode();
    字符串knownName=addresses.get(0.getFeatureName();
    locationTxt.setText(地址+“”+城市+“”+国家);
    }
    }捕获(IOE异常){
    //TODO自动生成的捕捉块
    e、 printStackTrace();
    }
    }
    
    从Lat Long(地理坐标)获取地址还有最后一个技巧。您只需点击谷歌地图web服务,通过纬度和经度即可。这只是一个获取方法web服务

    它将返回可以轻松解析以获取地址的JSON响应。其URL为:


    您可以将32,75替换为
    尝试使用地理编码器使用以下代码:

      Geocoder gcd = new Geocoder(MainActivity.this, Locale.getDefault());
      List<Address> geoAddresses = geoAddresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
      if (geoAddresses.size() > 0) {
          String mUserLocation = "";
          for (int i = 0; i < 4; i++) { //Since it return only four value we declare this as static.
               mUserLocation = mUserLocation + geoAddresses.get(0).getAddressLine(i).replace(",", "") + ", ";
            } 
        }
    
    Geocoder gcd=新的地理编码器(MainActivity.this,Locale.getDefault());
    List geoAddresses=geoAddresses=gcd.getFromLocation(location.getLatitude(),location.getLatitude(),1);
    如果(geoAddresses.size()>0){
    字符串mUserLocation=“”;
    对于(inti=0;i<4;i++){//因为它只返回四个值,所以我们将其声明为静态。
    mUserLocation=mUserLocation+geoAddresses.get(0).getAddressLine(i).替换(“,”,“)+”,“;
    } 
    }
    
    只需使用此方法并通过lat、long考试

    public static void getAddress(Context context, double LATITUDE, double LONGITUDE{
        //Set Address
        try {
            Geocoder geocoder = new Geocoder(context, Locale.getDefault());
            List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);
    
            if (addresses != null && addresses.size() > 0) {
                String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
                String city = addresses.get(0).getLocality();
                String state = addresses.get(0).getAdminArea();
                String country = addresses.get(0).getCountryName();
                String postalCode = addresses.get(0).getPostalCode();
                String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
                Log.d(TAG, "getAddress:  address" + address);
                Log.d(TAG, "getAddress:  city" + city);
                Log.d(TAG, "getAddress:  state" + state);
                Log.d(TAG, "getAddress:  postalCode" + postalCode);
                Log.d(TAG, "getAddress:  knownName" + knownName);
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
        return;
    }
    
    publicstaticvoidgetaddress(上下文上下文、双纬度、双经度){
    //设定地址
    试一试{
    Geocoder Geocoder=新的地理编码器(上下文,Locale.getDefault());
    列表地址=geocoder.getFromLocation(纬度,经度,1);
    if(addresses!=null&&addresses.size()>0){
    String address=addresses.get(0).getAddressLine(0);//如果存在除此之外的任何其他地址行,请通过getMaxAddressLineIndex()检查最大可用地址行
    字符串city=addresses.get(0.getLocation();
    字符串状态=addresses.get(0.getAdminArea();
    字符串country=addresses.get(0.getCountryName();
    字符串postalCode=addresses.get(0.getPostalCode();
    String knownName=addresses.get(0).getFeatureName();//仅当可用时,否则返回NULL
    Log.d(标签“getAddress:address”+地址);
    Log.d(标签“getAddress:city”+城市);
    Log.d(标记“getAddress:state”+状态);
    Log.d(标记“get
    
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, this);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, true);
        Location location = locationManager.getLastKnownLocation(bestProvider);
    
        if (location == null) {
            Toast.makeText(getApplicationContext(), "GPS signal not found",
                    3000).show();
        }
        if (location != null) {
            Log.e("location", "location--" + location);
            Log.e("latitude at beginning",
                    "@@@@@@@@@@@@@@@" + location.getLatitude());
            onLocationChanged(location);
        }
    
    @Override
    public void onLocationChanged(Location location) {
    
        Geocoder geocoder;
        List<Address> addresses;
        geocoder = new Geocoder(this, Locale.getDefault());
    
        latitude = location.getLatitude();
        longitude = location.getLongitude();
    
        Log.e("latitude", "latitude--" + latitude);
    
        try {
            Log.e("latitude", "inside latitude--" + latitude);
            addresses = geocoder.getFromLocation(latitude, longitude, 1);
    
            if (addresses != null && addresses.size() > 0) {
                String address = addresses.get(0).getAddressLine(0); 
                String city = addresses.get(0).getLocality();
                String state = addresses.get(0).getAdminArea();
                String country = addresses.get(0).getCountryName();
                String postalCode = addresses.get(0).getPostalCode();
                String knownName = addresses.get(0).getFeatureName(); 
    
                locationTxt.setText(address + " " + city + " " + country);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    http://maps.googleapis.com/maps/api/geocode/json?latlng=32,75&sensor=true
    
      Geocoder gcd = new Geocoder(MainActivity.this, Locale.getDefault());
      List<Address> geoAddresses = geoAddresses = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
      if (geoAddresses.size() > 0) {
          String mUserLocation = "";
          for (int i = 0; i < 4; i++) { //Since it return only four value we declare this as static.
               mUserLocation = mUserLocation + geoAddresses.get(0).getAddressLine(i).replace(",", "") + ", ";
            } 
        }
    
    public static void getAddress(Context context, double LATITUDE, double LONGITUDE{
        //Set Address
        try {
            Geocoder geocoder = new Geocoder(context, Locale.getDefault());
            List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1);
    
            if (addresses != null && addresses.size() > 0) {
                String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
                String city = addresses.get(0).getLocality();
                String state = addresses.get(0).getAdminArea();
                String country = addresses.get(0).getCountryName();
                String postalCode = addresses.get(0).getPostalCode();
                String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
                Log.d(TAG, "getAddress:  address" + address);
                Log.d(TAG, "getAddress:  city" + city);
                Log.d(TAG, "getAddress:  state" + state);
                Log.d(TAG, "getAddress:  postalCode" + postalCode);
                Log.d(TAG, "getAddress:  knownName" + knownName);
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
        return;
    }
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Locale;
    
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import java.io.IOException;
    import java.util.List;
    import java.util.Locale;
    
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.provider.Settings;
    
    public class GPSService extends Service implements LocationListener {
    
    // saving the context for later use
    private final Context mContext;
    
    // if GPS is enabled
    boolean isGPSEnabled = false;
    // if Network is enabled
    boolean isNetworkEnabled = false;
    // if Location co-ordinates are available using GPS or Network
    public boolean isLocationAvailable = false;
    
    // Location and co-ordinates coordinates
    Location mLocation;
    double mLatitude;
    double mLongitude;
    
    // Minimum time fluctuation for next update (in milliseconds)
    private static final long TIME = 30000;
    // Minimum distance fluctuation for next update (in meters)
    private static final long DISTANCE = 20;
    
    // Declaring a Location Manager
    protected LocationManager mLocationManager;
    
    public GPSService(Context context) {
        this.mContext = context;
        mLocationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);
    
    }
    
    /**
     * Returs the Location
     * 
     * @return Location or null if no location is found
     */
    public Location getLocation() {
        try {
    
            // Getting GPS status
            isGPSEnabled = mLocationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);
    
            // If GPS enabled, get latitude/longitude using GPS Services
            if (isGPSEnabled) {
                mLocationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, TIME, DISTANCE, this);
                if (mLocationManager != null) {
                    mLocation = mLocationManager
                            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (mLocation != null) {
                        mLatitude = mLocation.getLatitude();
                        mLongitude = mLocation.getLongitude();
                        isLocationAvailable = true; // setting a flag that
                                                    // location is available
                        return mLocation;
                    }
                }
            }
    
            // If we are reaching this part, it means GPS was not able to fetch
            // any location
            // Getting network status
            isNetworkEnabled = mLocationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
            if (isNetworkEnabled) {
                mLocationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, TIME, DISTANCE, this);
                if (mLocationManager != null) {
                    mLocation = mLocationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (mLocation != null) {
                        mLatitude = mLocation.getLatitude();
                        mLongitude = mLocation.getLongitude();
                        isLocationAvailable = true; // setting a flag that
                                                    // location is available
                        return mLocation;
                    }
                }
            }
            // If reaching here means, we were not able to get location neither
            // from GPS not Network,
            if (!isGPSEnabled) {
                // so asking user to open GPS
                askUserToOpenGPS();
            }
    
        } catch (Exception e) {
            e.printStackTrace();
        }
        // if reaching here means, location was not available, so setting the
        // flag as false
        isLocationAvailable = false;
        return null;
    }
    
    /**
     * Gives you complete address of the location
     * 
     * @return complete address in String
     */
    public String getLocationAddress() {
    
        if (isLocationAvailable) {
    
            Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());
            // Get the current location from the input parameter list
            // Create a list to contain the result address
            List<Address> addresses = null;
            try {
                /*
                 * Return 1 address.
                 */
                addresses = geocoder.getFromLocation(mLatitude, mLongitude, 1);
            } catch (IOException e1) {
                e1.printStackTrace();
                return ("IO Exception trying to get address:" + e1);
            } catch (IllegalArgumentException e2) {
                // Error message to post in the log
                String errorString = "Illegal arguments "
                        + Double.toString(mLatitude) + " , "
                        + Double.toString(mLongitude)
                        + " passed to address service";
                e2.printStackTrace();
                return errorString;
            }
            // If the reverse geocode returned an address
            if (addresses != null && addresses.size() > 0) {
                // Get the first address
                Address address = addresses.get(0);
                /*
                 * Format the first line of address (if available), city, and
                 * country name.
                 */
                String addressText = String.format(
                        "%s, %s, %s",
                        // If there's a street address, add it
                        address.getMaxAddressLineIndex() > 0 ? address
                                .getAddressLine(0) : "",
                        // Locality is usually a city
                        address.getLocality(),
                        // The country of the address
                        address.getCountryName());
                // Return the text
                return addressText;
            } else {
                return "No address found by the service: Note to the developers, If no address is found by google itself, there is nothing you can do about it.";
            }
        } else {
            return "Location Not available";
        }
    
    }
    
    
    
    /**
     * get latitude
     * 
     * @return latitude in double
     */
    public double getLatitude() {
        if (mLocation != null) {
            mLatitude = mLocation.getLatitude();
        }
        return mLatitude;
    }
    
    /**
     * get longitude
     * 
     * @return longitude in double
     */
    public double getLongitude() {
        if (mLocation != null) {
            mLongitude = mLocation.getLongitude();
        }
        return mLongitude;
    }
    
    /**
     * close GPS to save battery
     */
    public void closeGPS() {
        if (mLocationManager != null) {
            mLocationManager.removeUpdates(GPSService.this);
        }
    }
    
    /**
     * show settings to open GPS
     */
    public void askUserToOpenGPS() {
        AlertDialog.Builder mAlertDialog = new AlertDialog.Builder(mContext);
    
        // Setting Dialog Title
        mAlertDialog.setTitle("Location not available, Open GPS?")
        .setMessage("Activate GPS to use use location services?")
        .setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
                }
            })
            .setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    }
                }).show();
    }
    
    /** 
     * Updating the location when location changes
     */
    @Override
    public void onLocationChanged(Location location) {
        mLatitude = location.getLatitude();
        mLongitude = location.getLongitude();
    }
    
    @Override
    public void onProviderDisabled(String provider) {
    }
    
    @Override
    public void onProviderEnabled(String provider) {
    }
    
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }
    
    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
    
    }
    
    public class GeoLocation {
    
    private Context mContext;
    
    private String mLatitude;
    private String mLongtitude;
    private String mStreet;
    private String mHouseNumber;
    private String mPostalCode;
    private String mCity;
    
    private Location mMarkerLocation;
    
    public GeoLocation (Context context) {
        mContext = context;
    }
    
    public String getStreet () {
        return mStreet;
    }
    
    public String getHouseNumber () {
        return mHouseNumber;
    }
    
    public String getPostalCode () {
        return mPostalCode;
    }
    
    public String getCity () {
        return mCity;
    }
    
    public String getLatitude () {
        return mLatitude;
    }
    
    public String getLongtitude () {
        return mLongtitude;
    }
    
    // Lookup address via reverse geolocation
    // Call this one
    public void lookUpAddress (Location markerLocation) {
        mMarkerLocation = markerLocation;
        if (Geocoder.isPresent()) {
            (new GetAddressTask(mContext)).execute();
        }
    }
    
    public class GetAddressTask extends AsyncTask<android.location.Location, Void, String> {
    
        public GetAddressTask (Context context) {
            super();
            mContext = context;
        }
    
        @Override
        protected String doInBackground (android.location.Location... params) {
            Geocoder geocoder =
                    new Geocoder(mContext, Locale.getDefault());
            android.location.Location location = params[0];
    
            List<Address> addresses = null;
            try {
                if (mMarkerLocation != null) {
                    addresses = geocoder.getFromLocation(mMarkerLocation.getLatitude(),
                            mMarkerLocation.getLongitude(), 1);
                }
            } catch (IOException exception) {
                Log.e("ComplaintLocation",
                        "IO Exception in getFromLocation()", exception);
    
                return ("IO Exception trying to get address");
            } catch (IllegalArgumentException exception) {
                String errorString = "Illegal arguments " +
                        Double.toString(location.getLatitude()) + " , " +
                        Double.toString(location.getLongitude()) + " passed to address service";
                Log.e("LocationSampleActivity", errorString, exception);
    
                return errorString;
            }
    
            if (addresses != null && addresses.size() > 0) {
                Address address = addresses.get(0);
    
                if (address.getMaxAddressLineIndex() > 0) {
                    return String.format(
                            "%s/%s/%s/%s/%s/%s",
                            address.getLatitude(), // 0
                            address.getLongitude(), // 1
                            address.getThoroughfare(), // 2
                            address.getSubThoroughfare(), //3
                            address.getPostalCode(), // 4
                            address.getLocality()); // 5
                } else {
                    return String.format(
                            "%s/%s/%s/%s",
                            address.getLatitude(), // 0
                            address.getLongitude(), // 1
                            address.getPostalCode(), // 2
                            address.getLocality()); // 3
                }
            } else return "No address found";
        }
    
        // Format address string after lookup
        @Override
        protected void onPostExecute (String address) {
    
            String[] addressFields = TextUtils.split(address, "/");
            Log.d("ADDRESS ARRAY", Arrays.toString(addressFields));
    
            // Workaround: doInBackground can only return Strings instead of, for example, an
            // Address instance or a String[] directly. To be able to use TextUtils.isEmpty()
            // on fields returned by this method, set each String that currently reads "null" to
            // a null reference
            for (int fieldcnt = 0; fieldcnt < addressFields.length; ++fieldcnt) {
                if (addressFields[fieldcnt].equals("null"))
                    addressFields[fieldcnt] = null;
            }
    
            switch (addressFields.length) {
                case 4:
                    mStreet = null;
                    mHouseNumber = null;
                    mLatitude = addressFields[0];
                    mLongtitude = addressFields[1];
                    mPostalCode = addressFields[2];
                    mCity = addressFields[3];
                    break;
                case 6:
                    mLatitude = addressFields[0];
                    mLongtitude = addressFields[1];
                    mStreet = addressFields[2];
                    mHouseNumber = addressFields[3];
                    mPostalCode = addressFields[4];
                    mCity = addressFields[5];
                    break;
                default:
                    mLatitude = null;
                    mLongtitude = null;
                    mStreet = null;
                    mHouseNumber = null;
                    mPostalCode = null;
                    mCity = null;
                    break;
            }
    
            Log.d("GeoLocation Street", mStreet);
            Log.d("GeoLocation No.", mHouseNumber);
            Log.d("GeoLocation Postalcode", mPostalCode);
            Log.d("GeoLocation Locality", mCity);
            Log.d("GeoLocation Lat/Lng", "[" + mLatitude + ", " + mLongtitude + 
        "]");
        }
     }
       }
    
    GeoLocation geoLocation = new GeoLocation(getActivity()); // or (this) if 
    called from an activity and not from a fragment
    mGeoLocation.lookUpAddress(LOCATION_FROM_MAP);
    
    public String getAddress(LatLng latLng) {
        String cAddress = "";
        if (latLng == null) {
            errorMessage = "no_location_data_provided";
            Log.wtf(TAG, errorMessage);
            return "";
        }
        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    
        // Address found using the Geocoder.
        List<Address> addresses = null;
    
        try {
            // Using getFromLocation() returns an array of Addresses for the area immediately
            // surrounding the given latitude and longitude. The results are a best guess and are
            // not guaranteed to be accurate.
            addresses = geocoder.getFromLocation(
                    latLng.latitude,
                    latLng.longitude,
                    // In this sample, we get just a single address.
                    1);
        } catch (IOException ioException) {
            // Catch network or other I/O problems.
            errorMessage = "service_not_available";
            Log.e(TAG, errorMessage, ioException);
        } catch (IllegalArgumentException illegalArgumentException) {
            // Catch invalid latitude or longitude values.
            errorMessage = "invalid_lat_long_used";
            Log.e(TAG, errorMessage + ". " +
                    "Latitude = " + latLng.latitude +
                    ", Longitude = " + latLng.longitude, illegalArgumentException);
        }
    
        // Handle case where no address was found.
        if (addresses == null || addresses.size() == 0) {
            if (errorMessage.isEmpty()) {
                errorMessage = "no_address_found";
                Log.e(TAG, errorMessage);
            }
        } else {
            Address address = addresses.get(0);
            ArrayList<String> addressFragments = new ArrayList<String>();
            // Fetch the address lines using {@code getAddressLine},
            // join them, and send them to the thread. The {@link android.location.address}
            // class provides other options for fetching address details that you may prefer
            // to use. Here are some examples:
            // getLocality() ("Mountain View", for example)
            // getAdminArea() ("CA", for example)
            // getPostalCode() ("94043", for example)
            // getCountryCode() ("US", for example)
            // getCountryName() ("United States", for example)
            String allAddress = "";
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                addressFragments.add(address.getAddressLine(i));
                allAddress += address.getAddressLine(i) + " ";
            }
            if (address.getAdminArea() != null) {
                state = address.getAdminArea();
            } else {
                state = "";
            }
            if (address.getLocality() != null) {
                city = address.getLocality();
            } else {
                city = "";
            }
            if (address.getPostalCode() != null) {
                postalCode = address.getPostalCode();
            } else {
                postalCode = "";
            }
    
            Log.i(TAG, "address_found");
            //driverAddress = TextUtils.join(System.getProperty("line.separator"), addressFragments);
            cAddress = allAddress;
            Log.e("result", cAddress.toString());
        }
        return cAddress;
    }
    
    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<Address> 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();
    
        }
    }
    }
    
    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<Address> 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);
            }
        }
    }
    
      public static String getAddressFromLatLng(Context context, LatLng latLng) {
        Geocoder geocoder;
        List<Address> addresses;
        geocoder = new Geocoder(context, Locale.getDefault());
        try {
            addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1);
            return addresses.get(0).getAddressLine(0);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    
     if (l != null) {
            val lat = l.latitude
            val lon = l.longitude
    
            val geocoder = Geocoder(this, Locale.getDefault())
            val addresses: List<Address>
    
            addresses = geocoder.getFromLocation(lat, lon, 1) 
    
            val address = addresses[0].getAddressLine(0)
            val address2 = addresses[0].getAddressLine(1)
            val city = addresses[0].locality
            val state = addresses[0].adminArea
            val country = addresses[0].countryName
            val postalCode = addresses[0].postalCode
            val knownName = addresses[0].featureName
    
            val message =
                    "Emergency situation. Call for help. My location is: " + address + "." + "http://maps.google.com/maps?saddr=" + lat + "," + lon
    
        }
    
      public class MainActivity extends AppCompatActivity {
    
             ...
    
      private Geocoder geocoder;
      private TextView mAddressTxtVu;
    
             ...
    
    
      // I assume that you got latitude and longitude correctly 
    
      mLatitude  =  20.23232
      mLongitude =  32.999
    
      String errorMessage = "";
    
      geocoder = new Geocoder(context, Locale.getDefault());
    
      List<Address> addresses = null;
    
      try {
                  addresses = geocoder.getFromLocation(
                           mlattitude,
                           mlongitude,
                           1);
          } catch (IOException e) {
                  errorMessage = getString(R.string.service_not_available);
                  Log.e(TAG, errorMessage, e);
          } catch (IllegalArgumentException illegalArgumentException) {
                            // Catch invalid latitude or longitude values.
                  errorMessage = getString(R.string.invalid_lat_long_used);
                  Log.e(TAG, errorMessage + ". " + "Latitude = " + mlattitude +", Longitude = " + mlongitude, illegalArgumentException);
          }
    
          // Handle case where no address was found.
          if (addresses == null || addresses.size() == 0) {
                 if (errorMessage.isEmpty()) {
                          errorMessage = getString(R.string.no_address_found);
                          Log.e(TAG, errorMessage);
                 }
    
          } else {
                 Address address = addresses.get(0);
                 ArrayList<String> addressFragments = new ArrayList<String>();
    
                 // Fetch the address lines using getAddressLine,
                 // join them, and send them to the thread.
                 for (int i = 0; i <= address.getMaxAddressLineIndex(); i++) {
                          addressFragments.add(address.getAddressLine(i));
                 }
                 // Log.i(TAG, getString(R.string.address_found));
    
    
        mAddressTxtVu.setText(TextUtils.join(System.getProperty("line.separator"),
                                    addressFragments));
                        }
    
    Geocoder geocoder;
            List<Address> addresses;
            geocoder = new Geocoder(getContext(), Locale.getDefault());
    
            try {
                addresses = geocoder. getFromLocation(latitude, longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
                String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
                String city = addresses.get(0).getLocality();
                String state = addresses.get(0).getAdminArea();
                String country = addresses.get(0).getCountryName();
                String postalCode = addresses.get(0).getPostalCode();
                String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL
    
                System.out.println(address+"-------------");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    private fun getAddress(latLng: LatLng): String {
    
        val geocoder = Geocoder(this, Locale.getDefault())
        val addresses: List<Address>?
        val address: Address?
        var addressText = ""
    
            addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1)
    
            if (addresses.isNotEmpty()) {
                address = addresses[0]
                    addressText = address.getAddressLine(0)
            }else{
                addressText = "its not appear"
            }
        return addressText
    }
    
    fun getAddress(latLng: LatLng){
    
    val geocoder = Geocoder(this, Locale.getDefault())
    val addresses: List<Address>?
    val address: Address?
    var fulladdress = ""
        addresses = geocoder.getFromLocation(latLng.latitude, latLng.longitude, 1)
    
        if (addresses.isNotEmpty()) {
            address = addresses[0]
            fulladdress = address.getAddressLine(0) // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex
            var city = address.getLocality();
            var state = address.getAdminArea();
            var country = address.getCountryName();
            var postalCode = address.getPostalCode();
            var knownName = address.getFeatureName(); // Only if available else return NULL
        }else{
            fulladdress = "Location not found"
        }
    
    public void GetLocation() throws IOException {
    
        LocationManager locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
    
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                || (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
    
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
            }, 200);
    
            return;
        } else {
    
    
    
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    Log.d(TAG, "onLocationChanged: " + location.getLongitude() + " , " + location.getLatitude());
    
                }
    
                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {
                    Log.d(TAG, "onStatusChanged: " + s);
    
                }
    
                @Override
                public void onProviderEnabled(String s) {
    
                }
    
                @Override
                public void onProviderDisabled(String s) {
    
                }
            });
            Criteria criteria = new Criteria();
            String bestProvider = locationManager.getBestProvider(criteria, true);
            Location location = locationManager.getLastKnownLocation(bestProvider);
    
            if (location == null) {
                Toast.makeText(context, "GPS signal not found",
                        Toast.LENGTH_LONG).show();
            }
            if (location != null) {
                Log.e("location", "location--" + location);
                Log.e("latitude at beginning",
                        "@@@@@@@@@@@@@@@" + location.getLatitude());
                // onLocationChanged(location);
            }
    
    
            Geocoder geocoder;
            List<Address> addresses;
            geocoder = new Geocoder(context, Locale.getDefault());
            addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5
            String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
            String city = addresses.get(0).getLocality();
            String state = addresses.get(0).getAdminArea();
            String country = addresses.get(0).getCountryName();
            String postalCode = addresses.get(0).getPostalCode();
            String knownName = addresses.get(0).getFeatureName();
    
            Log.d(TAG, "GetLocation: address " + address + " city " + city + " state " + state + " country " + country + " postalCode " + postalCode + " knownName " + knownName);
        }
    }