Search code examples
androidandroid-location

How to get longitude and latitude in Android


I want to find the longitude and latitude of my current location, but I keep get NULL.

double lat = loc.getLatitude(); //Cause the result is null, so can't know longitude and latitude
double lng = loc.getLongitude();


 LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);  
    String provider = LocationManager.GPS_PROVIDER;  
    Location location = locationManager.getLastKnownLocation(provider); //result is null!

This is the code to get the GPS status. It works fine:

public void onGpsStatusChanged(int event) { // get the GPS statue  
                LocationManager locationManager = (LocationManager) GpsActivity.this.getSystemService(Context.LOCATION_SERVICE);  
                GpsStatus status = locationManager.getGpsStatus(null);  
                String satelliteInfo = updateGpsStatus(event, status);
                myTextView.setText(satelliteInfo);//work fine ,searched satellite:16
    }
    };
        private String updateGpsStatus(int event, GpsStatus status) {  
            StringBuilder sb2 = new StringBuilder("");  
            if (status == null) {  
                sb2.append("searched satellite number" +0);  
            } else if (event == GpsStatus.GPS_EVENT_SATELLITE_STATUS) {  
                int maxSatellites = status.getMaxSatellites();  
                Iterator<GpsSatellite> it = status.getSatellites().iterator();  
                numSatelliteList.clear();  
                int count = 0;  
                while (it.hasNext() && count <= maxSatellites) {  
                    GpsSatellite s = it.next();  
                    numSatelliteList.add(s);  
                    count++;  
                }  
                sb2.append("searched satellite number:" + numSatelliteList.size());  
            }
            return sb2.toString();  
        }

Solution

  • getLastKnownLocation() only returns a recent GPS fix, if available. You need to implement a LocationListener and use LocationManager#requestLocationUpdates() to fetch a new location.


    Basic implementation:

    public class Example extends Activity implements LocationListener {
        LocationManager mLocationManager;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
            Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if(location != null) {
                // Do something with the recent location fix
                //  otherwise wait for the update below
            }
            else {
                mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
            }
        }
    
        @Override
        public void onLocationChanged(Location location) {
            if (location != null) {
                Log.v("Location Changed", location.getLatitude() + " and " + location.getLongitude());
            }
        }
        // etc..
    }