2016-01-27 9 views
6

Próbuję użyć Smart Location Library, aby uzyskać okresowe aktualizacje lokalizacji. Ale po uruchomieniu procesu odpala raz słuchacza, a następnie nie ma dalszych aktualizacji. Oto kod użyłemProblemy z używaniem inteligentnej biblioteki lokalizacji

public void startTracking(View v) { 
    provider = new LocationGooglePlayServicesWithFallbackProvider(this); 


    Log.i("Tag","Start Tracking"); 
    SmartLocation smartLocation = new SmartLocation.Builder(this) 
      .logging(true) 
      .build(); 

    smartLocation.location(provider) 
      .config(LocationParams.BEST_EFFORT) 
      .start(this); 
    smartLocation.activity().start(this); 
} 

public void stopTracking(View v) { 
    Log.i("Tag","Stop Tracking"); 
    SmartLocation.with(this).location().stop(); 
    SmartLocation.with(this).activity().stop(); 

} 

@Override 
public void onActivityUpdated(DetectedActivity detectedActivity) 
{ 
    Log.i("Tag","ActivityUpdate : "+detectedActivity.toString()); 
} 

@Override 
public void onLocationUpdated(Location location) 
{ 
    Log.i("Tag","LocationUpdate : "+location.getLatitude()+","+location.getLongitude()); 
} 

to wyjście Logcat mam

01-27 14:09:01.791 3038-3038/com.angulusits.smartlocationtest I/Tag: 
Start Tracking 

01-27 14:09:01.879 3038-3038/com.angulusits.smartlocationtest I/Tag: 
ActivityUpdate : DetectedActivity [type=STILL, confidence=100] 

01-27 14:09:02.017 3038-3038/com.angulusits.smartlocationtest I/Tag: 
LocationUpdate : <some-value>,<some-value> 

ta jest podana jak najszybciej i naciśnij startButton, wtedy nie ma więcej wartości.

Sprawdziłem kod na Bibliotece dla wartości BEST_EFFORT która jest:

public static final LocationParams BEST_EFFORT = new Builder().setAccuracy(LocationAccuracy.MEDIUM).setDistance(150).setInterval(2500).build(); 

więc spodziewać aktualizacji co 2500 millisecs nawet jeśli urządzenie nie jest w ruchu. Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek.

+0

Ja też stoję w obliczu tego samego problemu. onLocationUpdated wywołuje raz, gdy zainicjowałem start, ale po tym nie ma żadnych aktualizacji. dzięki za każdą odpowiedź – kiruba

Odpowiedz

-1

Znacznie lepiej używać GoogleFuse Api. Here to kompletna dokumentacja tego Api.Jest znacznie lepiej niż przy użyciu biblioteki Github do śledzenia lokalizacji.

+0

Dbasz o wyjaśnienie, dlaczego? Biblioteka wydaje się być abstrakcyjna w usłudze Android Fused Provider i kilku innych dostawców w razie potrzeby. –

+0

@IvoPereira .. Inteligentna biblioteka lokalizacji może być zmieniana, aby poradzić sobie ze zmianami w lokalizacji. Jednak dla początkujących korzystających z pobieranej biblioteki nie powinno być zalecane ... Biblioteka lokalizacji smartv ma także dodatkowe funkcje, takie jak rozpoznawanie aktywności itp., Która nie jest potrzebna i sprawia, że ​​apk duże .. Nie jestem przeciwko użyciu biblioteki abstrakcyjnej, ale jeśli chodzi o naukę i korzystanie ze źródła, z którego inne biblioteki nasze stworzone ... lepiej lepiej nauczyć się źródła, a następnie korzystać z takich bibliotek.Myślę, że to pomaga –

12

Podczas tworzenia odbiornika lokalizacji trzeba powiedzieć continuous(). Wypróbuj ten fragment kodu poniżej,

private void startLocationListener() { 

    long mLocTrackingInterval = 1000 * 5; // 5 sec 
    float trackingDistance = 0; 
    LocationAccuracy trackingAccuracy = LocationAccuracy.HIGH; 

    LocationParams.Builder builder = new LocationParams.Builder() 
      .setAccuracy(trackingAccuracy) 
      .setDistance(trackingDistance) 
      .setInterval(mLocTrackingInterval); 

    SmartLocation.with(this) 
      .location() 
      .continuous() 
      .config(builder.build()) 
      .start(new OnLocationUpdatedListener() { 
       @Override 
       public void onLocationUpdated(Location location) { 
        processLocation(location); 
       } 
      }); 
} 

Spóźniona odpowiedź! W każdym razie to pomogłoby komuś.

Powiązane problemy