2013-06-04 11 views
7

Używam nowego API lokalizacji, które zostały wprowadzone w I/O 2013Android, Lokalizacja Zapytanie ustawić czas ważności nie działa

To działa dobrze i nie mam problemu z jego wynikami. Mój problem polega na tym, że ustawiam setExpirationDuration(WHATEVER_MILLIS) na dowolne millis, ale działa przez jedną minutę.

To jest mój kod:

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

Kiedy uruchomić aplikację, wskaźnik satelita zostanie wyświetlona w zasobniku tak, spodziewam się, żeby go zobaczyć zaledwie 10 sekund. Jednak zniknie po minucie.

Wszelkie sugestie lub komentarze będą mile widziane. Dzięki.

+0

Możliwe, że przedział czasu jest podzielony przez czas wygaśnięcia, pozostawiając 1 minutę – JRowan

+0

Dzięki JRowan, bez względu na to, co ustawię jako milli satelitarny wskaźnik będzie wyświetlany przez minutę. – Hesam

+0

Czy myślisz, że być może jest to priorytetowa wysoka dokładność, gps zajmuje trochę miejsca w domu w dokładnej lokalizacji, może przesłonić wygasanie – JRowan

Odpowiedz

1

Ponieważ wydaje się, że jest to prawdziwy problem w systemie Android, rozwiązaniem może być Handler, który ręcznie usuwa aktualizacje lokalizacji.

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

Po poprosić o aktualizacjach lokalizacji (maksymalnie przez okres 10s) nazywasz to Handler, oczywiście opóźnione do 10s.

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

Zapewnia to, że po 10 latach aktualizacje lokalizacji zostaną usunięte.

1

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

Mówi ona, że: „Czas zaczyna natychmiast (a nie wtedy, gdy wniosek zostanie przekazany do klienta lokalizacji), więc ponownie wywołać tę metodę, jeżeli wniosek jest re- użyte później. "

Można by oczekiwać, to czas, aby rozpocząć, gdy następna linia nazywa się:

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

Ale stany dokumentacja ten okres zaczyna się, gdy prośba obiekt jest tworzony.