title: Q. Android GPS location
body: <p>I'm trying to access my GPS location of my device, so I can then use this to load Google maps on the user's coordinates. I have followed various guides, but I dont seem to be acquiring any correct values.</p>
  
  <p><strong>The app does not crash, it simply displays a zero</strong></p>
  
  <p>Here is the code for my maps activity:</p>
  
  <pre><code>import android.os.Bundle;
  import android.support.v4.app.Fragment;
  import android.support.v7.app.ActionBarActivity;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.Button;
  import android.widget.Toast;
  
  public class Maps extends ActionBarActivity {
  
  Button btnLocation;
  GPSTracker gps;
  
  
  //private GoogleMap map;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //Hide action bar before Activity load
      getSupportActionBar().hide();
      setContentView(R.layout.activity_maps);
  
  
      btnLocation = (Button) findViewById(R.id.btnLocation);
  
      btnLocation.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              gps = new GPSTracker(Maps.this);
  
              if(gps.canGetLocation()){
                  double latitude = gps.getLatitude();
                  double longitude = gps.getLongitude();
  
                  Toast.makeText(getApplicationContext(),
                          "Your location is -\nLat: " + latitude +
                          "\nLong: " + longitude, Toast.LENGTH_LONG).show();
              } else {
                  gps.showSettingsAlert();
              }
          }
      });
  </code></pre>
  
  <p>Below is my code that is meant to obtain the location</p>
  
  <pre><code>import android.app.AlertDialog;
  import android.app.Service;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.Intent;
  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 GPSTracker extends Service implements LocationListener {
  
      private final Context context;
  //Flags for network/gps status
  boolean isGPSEnabled = false;
  boolean isNetworkEnabled = false;
  boolean canGetLocation = false;
  
  Location location;
  
  double latitude;
  double longitude;
  
  private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
  private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;
  
  public LocationManager locationManager;
  
  public GPSTracker(Context context) {
      this.context = context;
      getLocation();
  }
  
  public Location getLocation(){
      try {
          locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
          isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
          isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
  
          if (!isGPSEnabled &amp;&amp; !isNetworkEnabled) {
  
          } else {
              this.canGetLocation = true;
              //For use over networks
              if (isNetworkEnabled) {
  
                  locationManager.requestLocationUpdates(
                          LocationManager.NETWORK_PROVIDER,
                          MIN_TIME_BW_UPDATES,
                          MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
  
                  if (locationManager != null) {
                      location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
  
                      if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                      }
                  }
              }
              //For use over GPS
              if (isGPSEnabled) {
                  if(location == null) {
                      locationManager.requestLocationUpdates(
                              LocationManager.GPS_PROVIDER,
                              MIN_TIME_BW_UPDATES,
                              MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
  
                      if(locationManager != null) {
                          location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  
                          if(location != null){
                              latitude = location.getLatitude();
                              longitude = location.getLongitude();
                          }
                      }
                  }
              }
  
          }
      } catch (Exception e ) {
          e.printStackTrace();
      }
      return location;
  }
  
  
  
  public void stopUsingGPS() {
      if(locationManager != null) {
          locationManager.removeUpdates(GPSTracker.this);
      }
  }
  
  public double getLatitude() {
      if (location != null) {
          latitude = location.getLatitude();
      } else {
          getLocation();
      }
      return latitude;
  }
  
  public double getLongitude() {
      if (location != null){
          longitude = location.getLongitude();
      } else {
          getLocation();
      }
      return longitude;
  }
  
  
  
  public void showSettingsAlert() {
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
  
      alertDialog.setTitle("GPS is being set");
  
      alertDialog.setMessage("GPS is not enabled. Go to settings.");
  
      alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
              Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
              context.startActivity(intent);
  
          }
      });
  
      alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
              dialog.cancel();
          }
      });
  
      alertDialog.show();
  }
  
  
  public boolean canGetLocation() {
      return this.canGetLocation;
  }
  </code></pre>
  
  <p>I have also included the necessary code into the manifest:</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
  </code></pre>
  
  <p>Help is greatly appreciated</p>