title: How to get current location in Android
body: <p>I'm having troubles of getting my current position coordinates using the NETWORK provider of android location system. </p>
  
  <p>Already read a lot of tutorials and implemented 4 or 5 existing classes to my project and all of them are giving me the last coordinates but not the current ones.</p>
  
  <p>I'm pretty sure that the problem is something fundamental that I am missing but I am not able to understand what exactly it is. </p>
  
  <p><strong>Codes I'm using now:</strong></p>
  
  <p><strong>This is my main Activity</strong> </p>
  
  <pre><code>package com.example.locationtests;
  
  import android.os.Bundle;
  import android.app.Activity;
  import android.view.Menu;
  import android.widget.TextView;
  
  public class MainActivity extends Activity {
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      GPSTracker mGPS = new GPSTracker(this);
  
      TextView text = (TextView) findViewById(R.id.texts);
      if(mGPS.canGetLocation ){
      mGPS.getLocation();
      text.setText("Lat"+mGPS.getLatitude()+"Lon"+mGPS.getLongitude());
      }else{
          text.setText("Unabletofind");
          System.out.println("Unable");
      }
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  }
  </code></pre>
  
  <p><strong>This is the class I'm using for Tracking:</strong></p>
  
  <pre><code>package com.example.locationtests;
  
  import android.app.AlertDialog;
  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.provider.Settings;
  import android.util.Log;
  
  public final class GPSTracker implements LocationListener {
  
      private final Context mContext;
  
      // flag for GPS status
      public boolean isGPSEnabled = false;
  
      // flag for network status
      boolean isNetworkEnabled = false;
  
      // flag for GPS status
      boolean canGetLocation = false;
  
      Location location; // location
      double latitude; // latitude
      double longitude; // longitude
  
      // The minimum distance to change Updates in meters
      private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; // 10 meters
  
      // The minimum time between updates in milliseconds
      private static final long MIN_TIME_BW_UPDATES = 1; // 1 minute
  
      // Declaring a Location Manager
      protected LocationManager locationManager;
  
      public GPSTracker(Context context) {
          this.mContext = context;
          getLocation();
      }
  
      /**
       * Function to get the user's current location
       * 
       * @return
       */
      public Location getLocation() {
          try {
              locationManager = (LocationManager) mContext
                      .getSystemService(Context.LOCATION_SERVICE);
  
              // getting GPS status
              isGPSEnabled = locationManager
                      .isProviderEnabled(LocationManager.GPS_PROVIDER);
  
              Log.v("isGPSEnabled", "=" + isGPSEnabled);
  
              // getting network status
              isNetworkEnabled = locationManager
                      .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
  
              Log.v("isNetworkEnabled", "=" + isNetworkEnabled);
  
              if (isGPSEnabled == false &amp;&amp; isNetworkEnabled == false) {
                  // no network provider is enabled
              } else {
                  this.canGetLocation = true;
                  if (isNetworkEnabled) {
                      location=null;
                      locationManager.requestLocationUpdates(
                              LocationManager.NETWORK_PROVIDER,
                              MIN_TIME_BW_UPDATES,
                              MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                      Log.d("Network", "Network");
                      if (locationManager != null) {
                          location = locationManager
                                  .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                          if (location != null) {
                              latitude = location.getLatitude();
                              longitude = location.getLongitude();
                          }
                      }
                  }
                  // if GPS Enabled get lat/long using GPS Services
                  if (isGPSEnabled) {
                      location=null;
                      if (location == null) {
                          locationManager.requestLocationUpdates(
                                  LocationManager.GPS_PROVIDER,
                                  MIN_TIME_BW_UPDATES,
                                  MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                          Log.d("GPS Enabled", "GPS Enabled");
                          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;
      }
  
      /**
       * Stop using GPS listener Calling this function will stop using GPS in your
       * app
       * */
      public void stopUsingGPS() {
          if (locationManager != null) {
              locationManager.removeUpdates(GPSTracker.this);
          }
      }
  
      /**
       * Function to get latitude
       * */
      public double getLatitude() {
          if (location != null) {
              latitude = location.getLatitude();
          }
  
          // return latitude
          return latitude;
      }
  
      /**
       * Function to get longitude
       * */
      public double getLongitude() {
          if (location != null) {
              longitude = location.getLongitude();
          }
  
          // return longitude
          return longitude;
      }
  
      /**
       * Function to check GPS/wifi enabled
       * 
       * @return boolean
       * */
      public boolean canGetLocation() {
          return this.canGetLocation;
      }
  
      /**
       * Function to show settings alert dialog On pressing Settings button will
       * lauch Settings Options
       * */
      public void showSettingsAlert() {
          AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
  
          // Setting Dialog Title
          alertDialog.setTitle("GPS is settings");
  
          // Setting Dialog Message
          alertDialog
                  .setMessage("GPS is not enabled. Do you want to go to settings menu?");
  
          // On pressing Settings button
          alertDialog.setPositiveButton("Settings",
                  new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          Intent intent = new Intent(
                                  Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                          mContext.startActivity(intent);
                      }
                  });
  
          // on pressing cancel button
          alertDialog.setNegativeButton("Cancel",
                  new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.cancel();
                      }
                  });
  
          // Showing Alert Message
          alertDialog.show();
      }
  
      @Override
      public void onLocationChanged(Location location) {
      }
  
      @Override
      public void onProviderDisabled(String provider) {
      }
  
      @Override
      public void onProviderEnabled(String provider) {
      }
  
      @Override
      public void onStatusChanged(String provider, int status, Bundle extras) {
      }
  
  }
  </code></pre>
  
  <p><strong>This is my AndroidManifest.xml</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.locationtests"
      android:versionCode="1"
      android:versionName="1.0" &gt;
      &lt;uses-permission android:name="android.permission.CAMERA" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
      &lt;uses-permission android:name="android.permission.INTERNET"&gt;&lt;/uses-permission&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt; 
      &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;
      &lt;uses-permission android:name="android.permission.VIBRATE" /&gt;
      &lt;uses-feature android:name="android.hardware.camera" /&gt;
      &lt;uses-feature android:name="android.hardware.location" android:required="true" /&gt;
      &lt;uses-feature android:name="android.hardware.location.gps" android:required="false" /&gt;
  
      &lt;uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="17" /&gt;
  
      &lt;application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" &gt;
          &lt;activity
              android:name="com.example.locationtests.MainActivity"
              android:label="@string/app_name" &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  
  <p>Actually GPS positioning works fine, but NETWORK positioning dosn't.
  When Ive turned devices GPS on coordinates keep changing while i'm moving, but the same  doesn't happen when I have turn it off and relay on the NETWORK_PROVIDER</p>