2013-04-17 10 views
6

ciao qualcuno può darmi un codice di esempio per ottenere la posizione per ogni cinque minuti per favore ho provato e posso ottenere la posizione una volta clikking sul pulsante, ma ho bisogno di essere visualizzato una volta per cinque minuti.Come ottenere la posizione GPS una volta per Android 5 minuti?

si

ringraziamento questo è il mio codice:

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

utilizzare le funzioni di gestione e aggiornamento per ogni cinque minuti. il codice che è premere il pulsante metti in quella funzione –

+0

come usare una funzione di gestione puoi modificare questo codice –

risposta

10

Qui è il codice per il recupero della posizione e impostare il listener per GPS per ottenere la posizione corrente sulla pochi minuti a e la distanza, anche ho usato oggetto eseguibile per ottenere la posizione su ogni pochi minuti.

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); 
       } 
      } 
     } 
} 

Ora utilizzare questo metodo per ottenere la posizione corrente e l'ascoltatore è stato chiamato sul cambiamento posizione con ogni 1 min e 1.000 metro di distanza.

Per ottenere ogni 5 minuti è possibile utilizzare questo gestore e eseguibile per ottenere questa posizione su ben impostato periodo di tempo:

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); 

Ecco ascoltatore GPS per l'evento di posizione cambiamento:

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) { 
    } 
}; 

È può impostare il tempo di intervallo per ascoltatore e gestore stesso per ottenere la posizione GPS.

1

ho usato eseguibile per fare questo,

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 Usa il codice del timer in basso.

È possibile utilizzare le seguenti opzioni opzione 1 questo otterrà le posizioni se mobili spostato 100meters.

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

un'occhiata a questo link http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates%28java.lang.String,%20long,%20float,%20android.location.LocationListener%29

Opzione 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; 
       } 
      } 
     }; 

Timer chiamerà il gestore per il vostro tempo di durata (variazione 1000 nel vostro tempo necessario).

Spero che questo ti possa aiutare.

0

provare in questo modo:

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); 
    } 
}; 
Problemi correlati