Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android get current location name

I want to get the current location with name. I did coding for get current location (lat,lang), how can I show the relative place name?

(ie) 13.006389 - 80.2575 : Adyar,Chennai,India

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // called when the location provider status changes. Possible status: OUT_OF_SERVICE, TEMPORARILY_UNAVAILABLE or AVAILABLE.
    }
    public void onProviderEnabled(String provider) {
        // called when the location provider is enabled by the user
    }
    public void onProviderDisabled(String provider) {
        // called when the location provider is disabled by the user. If it is already disabled, it's called immediately after requestLocationUpdates
    }
    
    public void onLocationChanged(Location location) {
        double latitute = location.getLatitude();
        double longitude = location.getLongitude();
        // do whatever you want with the coordinates
    }
});
like image 240
Rajamohan Sugumaran Avatar asked Dec 17 '22 03:12

Rajamohan Sugumaran


2 Answers

This will convert the lat & lng into String Address and i have set it in the text field for your example. This is done by using the concept of Reverse Geocoding & there is a class called Geocoder in Android.

    //  Write the location name.
    //

    try {

        Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault());
        List<Address> addresses = geo.getFromLocation(latitude, longitude, 1);
        if (addresses.isEmpty()) {
            yourtextboxname.setText("Waiting for Location");
        }
        else {
            yourtextboxname.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
        }
    }
like image 190
3 revs, 3 users 86% Avatar answered Jan 06 '23 19:01

3 revs, 3 users 86%


Here is code to get current location and draw it on Google Maps

public class Showmap extends MapActivity {

    private MapView mapView;
    private MapController mapController;
    private LocationManager locationManager;
    private LocationListener locationListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showmap);
        LocationManager locationManager = (LocationManager) 
                getSystemService(Context.LOCATION_SERVICE);
        locationListener = new GPSLocationListener();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, locationListener);
        mapView = (MapView) findViewById(R.id.mapView);
        // enable Street view by default
        mapView.setStreetView(true);
        // enable to show Satellite view
        // mapView.setSatellite(true);
        // enable to show Traffic on map
        // mapView.setTraffic(true);
        mapView.setBuiltInZoomControls(true);
        mapController = mapView.getController();
        mapController.setZoom(16);
    }

    protected boolean isRouteDisplayed() {
        return false;
    }

    private class GPSLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {
                GeoPoint point = new GeoPoint(
                        (int) (location.getLatitude() * 1E6),
                        (int) (location.getLongitude() * 1E6));
                mapController.animateTo(point);
                mapController.setZoom(16);
                // add marker
                MapOverlay mapOverlay = new MapOverlay();
                mapOverlay.setPointToDraw(point);
                List<Overlay> listOfOverlays = mapView.getOverlays();
                listOfOverlays.clear();
                listOfOverlays.add(mapOverlay);
                String address = ConvertPointToLocation(point);
                Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT)
                        .show();
                mapView.invalidate();
            }
        }

        public String ConvertPointToLocation(GeoPoint point) {
            String address = "";
            Geocoder geoCoder = new Geocoder(getBaseContext(),
                    Locale.getDefault());
            try {
                List<Address> addresses = geoCoder.getFromLocation(
                        point.getLatitudeE6() / 1E6,
                        point.getLongitudeE6() / 1E6, 1);
                if (addresses.size() > 0) {
                    for (int index = 0; index < addresses.get(0)
                            .getMaxAddressLineIndex(); index++)
                        address += addresses.get(0).getAddressLine(index) + " ";
                    Log.i(address, address);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return address;
        }

        @Override
        public void onProviderDisabled(String provider) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onStatusChanged(String provider,int status,Bundle extras){}
    }

    class MapOverlay extends Overlay {

        private GeoPoint pointToDraw;

        public void setPointToDraw(GeoPoint point) {
            pointToDraw = point;
        }

        public GeoPoint getPointToDraw() {
            return pointToDraw;
        }

        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
                long when) {
            super.draw(canvas, mapView, shadow);
            // convert point to pixels
            Point screenPts = new Point();
            mapView.getProjection().toPixels(pointToDraw, screenPts);
            // add marker
            Bitmap bmp = BitmapFactory.decodeResource(getResources(),
                    R.drawable.marker);
            // 24 is the height of image
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null);
            return true;
        }
    }
}
like image 20
Anu Avatar answered Jan 06 '23 18:01

Anu