2013-06-04 9 views
7

sto usando nuova API di posizione che era stata introdotta in I/O 2013.Android, Location Request, impostare la durata di scadenza non funziona

Funziona benissimo e non ho alcun problema con i suoi risultati. Il mio problema è quando imposto lo setExpirationDuration(WHATEVER_MILLIS) in qualsiasi millis, ma funziona per un minuto.

Questo è il mio codice:

LocationRequest locationRequest = LocationRequest.create() 
          .setInterval(10 * 60 * 1000) // every 10 minutes 
          .setExpirationDuration(10 * 1000) // After 10 seconds 
          .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

Quando eseguo l'applicazione, l'indicatore satellite sarà visualizzato nella barra così, mi aspetto di vederlo appena 10 secondi. Tuttavia, scomparirà dopo un minuto.

Qualsiasi suggerimento o commento sarebbe apprezzato. Grazie.

+0

Forse l'intervallo di tempo è diviso per il tempo di scadenza che parte 1 minuto – JRowan

+0

Grazie JRowan, indipendentemente da ciò che imposto, l'indicatore del satellite milli verrà visualizzato per un minuto. – Hesam

+0

Pensa che forse è la priorità con un'elevata accuratezza, gps porta un po 'a casa in una posizione esatta, forse sovrascrivendo la scadenza – JRowan

risposta

1

Poiché sembra essere un problema reale in Android, una soluzione alternativa potrebbe essere un gestore per rimuovere manualmente gli aggiornamenti di posizione.

listHandler = new Handler() { 
     public void handleMessage(Message msg) { 
      if (msg.what == 0) { 
       mLocationClient.removeLocationUpdates(MyActivity.this); 
       //Location Updates are now removed 
      } 
      super.handleMessage(msg); 
     } 
    }; 

Dopo aver richiesto per gli aggiornamenti di posizione (per una durata massima di 10 secondi) si chiama questo Handler, ovviamente in ritardo per 10s.

myLocationClient.requestLocationUpdates(...); 
listHandler.sendEmptyMessageDelayed(0, 10000); 

Questo assicura che dopo 10 secondi vengono rimossi gli aggiornamenti di posizione.

1

Nella documentazione (https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html#setExpirationDuration(long))

si dice che: "La durata inizia subito (e non quando la richiesta viene passata al client posizione), in modo da chiamare questo metodo ancora una volta se la richiesta è ri- usato in un secondo momento. "

Ci si aspetterebbe tale durata per iniziare quando si segue la linea si chiama:

LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, request, this); 

Ma, stati di documentazione tale durata ha inizio al momento della creazione oggetto di richiesta.