2013-04-17 7 views
6

Witam, czy ktoś może dać mi przykładowy kod, aby uzyskać lokalizację co pięć minut? Próbowałem i mogę uzyskać lokalizację raz przez kliknięcie przycisku, , ale potrzebuję go wyświetlić raz na pięć minut.Jak uzyskać lokalizację GPS raz na 5 minut Android?

dziękuję

to mój kod:

public void checkLocation(View v) { 

     //initialize location manager 
     manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     //check if GPS is enabled 
     //if not, notify user with a toast 
     if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      Toast.makeText(this, "GPS is disabled.", Toast.LENGTH_SHORT).show(); 
     } else { 

      //get a location provider from location manager 
      //empty criteria searches through all providers and returns the best one 
      String providerName = manager.getBestProvider(new Criteria(), true); 
      Location location = manager.getLastKnownLocation(providerName); 

      TextView tv = (TextView)findViewById(R.id.locationResults); 
      if (location != null) { 
       tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude"); 
      } else { 
       tv.setText("Last known location not found. Waiting for updated location..."); 
      } 
      //sign up to be notified of location updates every 15 seconds - for production code this should be at least a minute 
      manager.requestLocationUpdates(providerName, 15000, 1, this); 
     } 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     TextView tv = (TextView)findViewById(R.id.locationResults); 
     if (location != null) { 
      tv.setText(location.getLatitude() + " latitude, " + location.getLongitude() + " longitude"); 
     } else { 
      tv.setText("Problem getting location"); 
     } 
    } 

    @Override 
    public void onProviderDisabled(String arg0) {} 

    @Override 
    public void onProviderEnabled(String arg0) {} 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} 

    // Find the closest Bart Station 
    public String findClosestBart(Location loc) { 
     double lat = loc.getLatitude(); 
     double lon = loc.getLongitude(); 

     double curStatLat = 0; 
     double curStatLon = 0; 
     double shortestDistSoFar = Double.POSITIVE_INFINITY; 
     double curDist; 
     String curStat = null; 
     String closestStat = null; 

     //sort through all the stations 
     // write some sort of for loop using the API. 

     curDist = Math.sqrt(((lat - curStatLat) * (lat - curStatLat)) + 
         ((lon - curStatLon) * (lon - curStatLon))); 
     if (curDist < shortestDistSoFar) { 
      closestStat = curStat; 
     } 

     return closestStat; 

     } 
+0

użyj funkcji obsługi i aktualizacji dla każdych pięciu miunt. kod, który jest naciśnięciem przycisku umieszczonego w tej funkcji –

+0

jak korzystać z funkcji obsługi można edytować ten kod –

Odpowiedz

10

Oto kod dla uzyskania lokalizację i ustawić detektor dla GPS, aby uzyskać aktualną lokalizację na kilka minut i odległości, również Użyłem runnable obiekt, aby uzyskać miejsce na każdy kilka minut.

Location gpslocation = null; 

private static final int GPS_TIME_INTERVAL = 60000; // get gps location every 1 min 
private static final int GPS_DISTANCE= 1000; // set the distance value in meter 

/* 
    for frequently getting current position then above object value set to 0 for both you will get continues location but it drown the battery 
*/ 

private void obtainLocation(){ 
if(locMan==null) 
    locMan = (LocationManager) getSystemService(LOCATION_SERVICE); 

    if(locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     gpslocation = locMan.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     if(isLocationListener){ 
      locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
         GPS_TIME_INTERVAL, GPS_DISTANCE, GPSListener); 
       } 
      } 
     } 
} 

Teraz użyj tej metody, aby uzyskać bieżącą lokalizację, a detektor był wywoływany przy zmianie lokalizacji co 1 minutę i 1000 metrów odległości.

Uzyskania co 5 minut można użyć tego przewodnika i runnable dostać tę lokalizację na dobrze ustawionej Okres:

private static final int HANDLER_DELAY = 1000*60*5; 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
     public void run() { 
      myLocation = obtainLocation(); 
      handler.postDelayed(this, HANDLER_DELAY); 
     } 
    }, START_HANDLER_DELAY); 

Oto słuchacz GPS Zmień miejsce imprezy:

private LocationListener GPSListener = new LocationListener(){ 
    public void onLocationChanged(Location location) { 
     // update location 
     locMan.removeUpdates(GPSListener); // remove this listener 
    } 

    public void onProviderDisabled(String provider) { 
    } 

    public void onProviderEnabled(String provider) { 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
}; 

Ty można ustawić interwał czasu dla odbiornika i obsługi tego samego dla uzyskania lokalizacji GPS.

1

użyłem przypisanymi ten sposób

final Runnable r = new Runnable() { 
     public void run() { 
    //Here add your code location listener call 
    handler.postDelayed(this, 300000); 
     } 
    }; 

    handler.postDelayed(r, 300000); 
2

Hi Użyj poniższego kodu czasowego.

Można użyć opcji poniżej opcja 1 to dostanie lokalizacje jeśli mobilny przeniósł 100meters.

captureFrequencey=3*60*1000; 
LocationMngr.requestLocationUpdates(LocationManager.GPS_PROVIDER, captureFrequencey, 100, this); 

rzucić okiem na ten link http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates%28java.lang.String,%20long,%20float,%20android.location.LocationListener%29

Opcji 2

TimerTask refresher; 
     // Initialization code in onCreate or similar: 
     timer = new Timer();  
     refresher = new TimerTask() { 
      public void run() { 
       handler.sendEmptyMessage(0); 
      }; 
     }; 
     // first event immediately, following after 1 seconds each 
     timer.scheduleAtFixedRate(refresher, 0,1000); 
     //======================================================= 


final Handler handler = new Handler() { 


     public void handleMessage(Message msg) { 
       switch (msg.what) { 
       case REFRESH: 
        //your code here 

        break; 
       default: 
        break; 
       } 
      } 
     }; 

czasowy wywoła obsługi za okres czasu (zmiana 1000 do swojej wymaganego czasu).

Mam nadzieję, że to ci pomoże.

0

spróbuj tak:

private Handler handler = new Handler(); 

handler.postDelayed(runnable, 300000); 

private Runnable runnable = new Runnable() { 
    public void run() { 
     if (location != null) { 

      onLocationChanged(location); 
     } else { 
      System.out.println("Location not avilable"); 
     } 

     handler.postDelayed(this, 300000); 
    } 
};