3

How to get the current Latitude and Longitude in android2.3.3?

I try to Follow this but I can't run programs.

My code

    LatView = (TextView)findViewById(R.id.LatText);
    LngView = (TextView)findViewById(R.id.LngText);
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    double longitude = location.getLongitude();
    double latitude = location.getLatitude();

In android manifest I put this.

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Please help. Thanks.

Community
  • 1
  • 1
MaximumBua
  • 61
  • 1
  • 2
  • 4
  • can't run? what is the error? – Uku Loskit Jun 28 '12 at 18:49
  • Post logcat if the app crashes. – nhaarman Jun 28 '12 at 18:50
  • Are you testing on the simulator, if so you'll need to go into the DDMS perspective in eclipse to pass location coordinates into the simulator for testing. It's won't generate random ones on the fly. – jerrylroberts Jun 28 '12 at 18:53
  • some time system returns getLastKnownLocation as null so location.getLongitude() will throw null pointer exception – Dheeresh Singh Jun 28 '12 at 19:01
  • as jerryroberts say, a simulater needs you to fake some location. However, that function of the ddms is fairly bugged, at least it was when i was working with it, using a real device is by far the best when working with gps. – KristianMedK Jun 29 '12 at 06:54

2 Answers2

3

This is what i have in my application to find the device current location, it works fine:

public class MyLocationActivity extends Activity implements LocationListener {
    private LocationManager mgr;
    private String best;
    public static double myLocationLatitude;
    public static double myLocationLongitude;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mgr = (LocationManager) getSystemService(LOCATION_SERVICE);

        dumpProviders();

        Criteria criteria = new Criteria();

        best = mgr.getBestProvider(criteria, true);
        Log.d("best provider", best);

        Location location = mgr.getLastKnownLocation(best);
        dumpLocation(location);

            //may be some intent here
    }

    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        dumpLocation(location);

    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onPause() {

        super.onPause();
        mgr.removeUpdates(this);
    }

    @Override
    protected void onResume() {

        super.onResume();
        mgr.requestLocationUpdates(best, 15000, 1, this);
    }

    private void dumpLocation(Location l) {

        if (l == null) {

            myLocationLatitude = 0.0;
            myLocationLongitude = 0.0;
        } else {

            myLocationLatitude = l.getLatitude();
            myLocationLongitude = l.getLongitude();
        }
    }

    private void dumpProviders() {

        List<String> providers = mgr.getAllProviders();
        for (String p : providers) {

            dumpProviders(p);
        }
    }

    private void dumpProviders(String s) {

        LocationProvider info = mgr.getProvider(s);
        StringBuilder builder = new StringBuilder();
        builder.append("name: ").append(info.getName());
    }

}

Here MyLocationLatitude and MyLocationLongitude gives the values of lat and long you needed.

Archie.bpgc
  • 23,812
  • 38
  • 150
  • 226
2

You need to check if the last location is null, if it is then you ask the GPS provider for a new location like so:

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 && location.getTime() > Calendar.getInstance().getTimeInMillis() - 2 * 60 * 1000) {
            // Do something with the recent location if it is less than two minutes old
        }
        else {
            // Request a new location if necessary
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        }
    }

    public void onLocationChanged(Location location) {
        if (location != null) {
        // Do something withthe current location

        // If you only want one location update un-comment this line
        //mLocationManager.removeUpdates(this);
        }
    }

    public void onProviderDisabled(String arg0) {}
    public void onProviderEnabled(String arg0) {}
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
}
Sam
  • 86,580
  • 20
  • 181
  • 179