How to get Latitude and Longitude of the mobile device in android? How to get Latitude and Longitude of the mobile device in android? android android

How to get Latitude and Longitude of the mobile device in android?


Use the LocationManager.

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);double longitude = location.getLongitude();double latitude = location.getLatitude();

The call to getLastKnownLocation() doesn't block - which means it will return null if no position is currently available - so you probably want to have a look at passing a LocationListener to the requestLocationUpdates() method instead, which will give you asynchronous updates of your location.

private final LocationListener locationListener = new LocationListener() {    public void onLocationChanged(Location location) {        longitude = location.getLongitude();        latitude = location.getLatitude();    }}lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);

You'll need to give your application the ACCESS_FINE_LOCATION permission if you want to use GPS.

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

You may also want to add the ACCESS_COARSE_LOCATION permission for when GPS isn't available and select your location provider with the getBestProvider() method.


Here is the class LocationFinder to find the GPS location. This class will call MyLocation, which will do the business.

LocationFinder

public class LocationFinder extends Activity {    int increment = 4;    MyLocation myLocation = new MyLocation();    // private ProgressDialog dialog;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.intermediat);        myLocation.getLocation(getApplicationContext(), locationResult);        boolean r = myLocation.getLocation(getApplicationContext(),            locationResult);        startActivity(new Intent(LocationFinder.this,        // Nearbyhotelfinder.class));            GPSMyListView.class));        finish();    }    public LocationResult locationResult = new LocationResult() {        @Override        public void gotLocation(Location location) {            // TODO Auto-generated method stub            double Longitude = location.getLongitude();            double Latitude = location.getLatitude();            Toast.makeText(getApplicationContext(), "Got Location",                Toast.LENGTH_LONG).show();            try {                SharedPreferences locationpref = getApplication()                    .getSharedPreferences("location", MODE_WORLD_READABLE);                SharedPreferences.Editor prefsEditor = locationpref.edit();                prefsEditor.putString("Longitude", Longitude + "");                prefsEditor.putString("Latitude", Latitude + "");                prefsEditor.commit();                System.out.println("SHARE PREFERENCE ME PUT KAR DIYA.");            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    };    // handler for the background updating}

MyLocation

public class MyLocation {    Timer timer1;    LocationManager lm;    LocationResult locationResult;    boolean gps_enabled=false;    boolean network_enabled=false;    public boolean getLocation(Context context, LocationResult result)    {        //I use LocationResult callback class to pass location value from MyLocation to user code.        locationResult=result;        if(lm==null)            lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);        //exceptions will be thrown if provider is not permitted.        try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}        try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}        //Toast.makeText(context, gps_enabled+" "+network_enabled,     Toast.LENGTH_LONG).show();        //don't start listeners if no provider is enabled        if(!gps_enabled && !network_enabled)            return false;        if(gps_enabled)            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);        if(network_enabled)            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);        timer1=new Timer();        timer1.schedule(new GetLastLocation(), 10000);    //    Toast.makeText(context, " Yaha Tak AAya", Toast.LENGTH_LONG).show();        return true;    }    LocationListener locationListenerGps = new LocationListener() {        public void onLocationChanged(Location location) {            timer1.cancel();            locationResult.gotLocation(location);            lm.removeUpdates(this);            lm.removeUpdates(locationListenerNetwork);        }        public void onProviderDisabled(String provider) {}        public void onProviderEnabled(String provider) {}        public void onStatusChanged(String provider, int status, Bundle extras) {}    };    LocationListener locationListenerNetwork = new LocationListener() {        public void onLocationChanged(Location location) {            timer1.cancel();            locationResult.gotLocation(location);            lm.removeUpdates(this);            lm.removeUpdates(locationListenerGps);        }        public void onProviderDisabled(String provider) {}        public void onProviderEnabled(String provider) {}        public void onStatusChanged(String provider, int status, Bundle extras) {}    };    class GetLastLocation extends TimerTask {        @Override        public void run() {            //Context context = getClass().getgetApplicationContext();             Location net_loc=null, gps_loc=null;             if(gps_enabled)                 gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);             if(network_enabled)                 net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);             //if there are both values use the latest one             if(gps_loc!=null && net_loc!=null){                 if(gps_loc.getTime()>net_loc.getTime())                     locationResult.gotLocation(gps_loc);                 else                     locationResult.gotLocation(net_loc);                 return;             }             if(gps_loc!=null){                 locationResult.gotLocation(gps_loc);                 return;             }             if(net_loc!=null){                 locationResult.gotLocation(net_loc);                 return;             }             locationResult.gotLocation(null);        }    }    public static abstract class LocationResult{        public abstract void gotLocation(Location location);    }}


With google things changes very often: non of the previous answers worked for me.

based on this google training here is how you do it using

fused location provider

this requires Set Up Google Play Services

Activity class

public class GPSTrackerActivity extends AppCompatActivity implements    GoogleApiClient.ConnectionCallbacks,      GoogleApiClient.OnConnectionFailedListener {private GoogleApiClient mGoogleApiClient;Location mLastLocation;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    if (mGoogleApiClient == null) {        mGoogleApiClient = new GoogleApiClient.Builder(this)                .addConnectionCallbacks(this)                .addOnConnectionFailedListener(this)                .addApi(LocationServices.API)                .build();    }}protected void onStart() {    mGoogleApiClient.connect();    super.onStart();}protected void onStop() {    mGoogleApiClient.disconnect();    super.onStop();}@Overridepublic void onConnected(Bundle bundle) {    try {        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(                mGoogleApiClient);        if (mLastLocation != null) {            Intent intent = new Intent();            intent.putExtra("Longitude", mLastLocation.getLongitude());            intent.putExtra("Latitude", mLastLocation.getLatitude());            setResult(1,intent);            finish();        }    } catch (SecurityException e) {    }}@Overridepublic void onConnectionSuspended(int i) {}@Overridepublic void onConnectionFailed(ConnectionResult connectionResult) {}}

usage

in you activity

 Intent intent = new Intent(context, GPSTrackerActivity.class);    startActivityForResult(intent,1);

And this method

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if(requestCode == 1){        Bundle extras = data.getExtras();        Double longitude = extras.getDouble("Longitude");        Double latitude = extras.getDouble("Latitude");    }}