title: Update users location continuously without external Library
body: <p>I am creating a Navigation application using mapbox. I am struggling with updating the users current location continuously. Currently I am using a class <code>MyLocation</code>
  to get the users current location.
  <code>originLocation</code> is defined as <code>private Location</code></p>
  
  <p>Not quite sure what to do. I have tried <code>locationEngine.requestLocationUpdates();</code> which does not seem to work.</p>
  
  <p>MyLocation class code: Got the code from <a href="https://stackoverflow.com/questions/3145089/what-is-the-simplest-and-most-robust-way-to-get-the-users-current-location-on-a/3145655#3145655">Geolocation post</a></p>
  
  <pre><code>import java.util.Timer;
  import java.util.TimerTask;
  import android.content.Context;
  import android.location.Location;
  import android.location.LocationListener;
  import android.location.LocationManager;
  import android.os.Bundle;
  
  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){}
  
          //don't start listeners if no provider is enabled
          if(!gps_enabled &amp;&amp; !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(), 20000);
          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() {
               lm.removeUpdates(locationListenerGps);
               lm.removeUpdates(locationListenerNetwork);
  
               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 &amp;&amp; net_loc!=null){
                   if(gps_loc.getTime()&gt;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);
      }
  }
  </code></pre>
  
  <p>How I am using the class: </p>
  
  <pre><code>@SuppressWarnings("MissingPermission")
  private void initializeLocationEngine() {
     try{
         locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
         locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
         locationEngine.activate();
         locationEngine.addLocationEngineListener(this);
         locationEngine.setInterval(0);
         locationEngine.setFastestInterval(500);
  
         MyLocation.LocationResult locationResult = new 
         MyLocation.LocationResult(){
             @Override
             public void gotLocation(Location location){
                 originLocation = location;
             }
         };
         MyLocation myLocation = new MyLocation();
         myLocation.getLocation(this, locationResult);
     }catch (Exception e){
         Log.d(TAG, "Error" + e);           
     }
  }
  </code></pre>
  
  <p>OnLocationChanged method code:</p>
  
  <pre><code>    @Override
      public void onLocationChanged(Location location) {
  
      try{
          locationEngine = new LocationEngineProvider(this).obtainBestLocationEngineAvailable();
          locationEngine.setPriority(LocationEnginePriority.HIGH_ACCURACY);
          locationEngine.activate();
          locationEngine.addLocationEngineListener(this);
          locationEngine.setInterval(0);
          locationEngine.setFastestInterval(500);
  
          MyLocation.LocationResult locationResult = new MyLocation.LocationResult(){
              @Override
              public void gotLocation(Location location){
                  originLocation = location;
              }
          };
          MyLocation myLocation = new MyLocation();
          myLocation.getLocation(this, locationResult);
  }catch (Exception e){
      Log.d(TAG, "Error" + e);
      Toast.makeText(Home.this,"Error initializeLocationEngine", Toast.LENGTH_SHORT).show();
  
      }
  }
  </code></pre>