Korzystanie z usług Google Play LocationClient w tle usługi

Moja aplikacja jest przeznaczona do śledzenia lokalizacji użytkownika okresowo i wysyłania go na serwer, Ostatnio zmieniłem mój kod z Google play services location API.

Utworzyłem locationclient i połączyłem się z usługą w onStartCommand

public int onStartCommand(Intent intent, int flags, int startId) {
    setUpLocationClientIfNeeded();
    if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
    mLocationClient.connect();
    return START_STICKY;

}

I w metodzie onConnected wysyłam Zapytanie o lokalizację,

@Override
public void onConnected(Bundle arg0) {
    System.out.println("Connected ...");
    mLocationClient.requestLocationUpdates(REQUEST, this);

}

Obiektem żądania jest,

 private static final LocationRequest REQUEST = LocationRequest.create()
      .setInterval(5*60*1000)      // 5 minutes
      .setFastestInterval(3*60*1000) // 3 minutes
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

Teraz problem jest,

  1. metoda onLocationChanged nie zostanie wywołana w podanym przedziale tj. 5 minut lub najszybszy interwał 3 minuty. Z dziennika mogłem zobaczyć, jego uzyskanie wywołane tylko dwa lub trzy razy po tym jego nie jest wywoływany w ogóle (sprawdziłem po 1 godzinie).

Jaki jest problem z powyższym kodem?. ( I couldn 't see any log for' disconnected ' also)

  1. aby rozwiązać ten problem, próbowałem użyć alarmmanagera do okresowego wywoływania zadania. Teraz jak uzyskać aktualizację pojedynczej lokalizacji poprzez Locationclient z broadcastreceiver. (locationclient.tylko getLastlocation() zwraca ostatnią przechowywaną lokalizację, ale nie żąda nowej lokalizacji)
Author: ThiyagaB, 2013-06-03

1 answers

Pełny kod źródłowy usługi w tle dostępny tutaj:

Https://gist.github.com/blackcj/20efe2ac885c7297a676

Spróbuj dodać super call do polecenia onStartCommand.

/**
 * Keeps the service running even after the app is closed.
 * 
 */
public int onStartCommand (Intent intent, int flags, int startId)
{
    super.onStartCommand(intent, flags, startId);

    setUpLocationClientIfNeeded();
    if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
    {
        mLocationClient.connect();
    }

    return START_STICKY;
}
 35
Author: blackcj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-07 18:44:56