2016-01-27 27 views
6

Sto tentando di utilizzare lo Smart Location Library per ottenere aggiornamenti periodici della posizione. Ma quando si avvia il processo, l'ascoltatore viene attivato una volta, quindi non ci sono ulteriori aggiornamenti. Ecco il codice che ho usatoProblemi nell'uso di Smart Location Library

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

Questa è l'uscita Logcat ho ottenuto

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> 

Questo è dato non appena premo startButton, poi non più valori.

ho controllato il codice sulla libreria per il valore BEST_EFFORT quali è:

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

così mi aspettavo aggiornamenti ogni 2500 millisecs, anche se il dispositivo non è in movimento. Apprezzerei se qualcuno potesse indicarmi la giusta direzione.

+0

Anche io di fronte allo stesso problema. l'onLocationUpdated chiama una volta quando ho avviato la procedura di avvio ma dopo non ci sono aggiornamenti. grazie per qualsiasi risposta – kiruba

risposta

-1

È molto meglio utilizzare GoogleFuse Api. Here è la documentazione completa di questo API. È molto meglio dell'utilizzo della libreria Github per il rilevamento della posizione.

+0

Cura spiegare perché? La libreria sembra astratto Android Location Fused Provider e alcuni altri provider, se necessario. –

+0

@IvoPereira ..La libreria intelligente può essere modificata per gestire le modifiche nella variazione della posizione .. sebbene non sia consigliabile per un principiante usare la libreria astratta ... La libreria di posizione smartv ha anche funzioni aggiuntive come il riconoscimento delle attività ecc. Che non è necessaria e rende l'apk di grandi dimensioni .. Non sono contro l'uso di una libreria astratta, ma quando si tratta di imparare e usare la fonte da dove altre librerie sono state create ..è molto meglio imparare prima la fonte e poi usare tali librerie. Speriamo che questo aiuti –

12

È necessario dire continuous() durante la creazione del listener di posizione. Prova questo frammento di codice di seguito,

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

La sua risposta in ritardo! Comunque questo aiuterebbe qualcuno.