2016-01-27 18 views
6

私は、Smart Location Libraryを使用して定期的な位置更新を取得しようとしています。しかし、プロセスを開始すると、それは一度リスナーを起動すると、更なる更新はありません。ここでコードが私はこれがLogcat出力であるスマートロケーションライブラリを使用する際の問題

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

を使用している私は、これは、すぐに私は、これ以上の値、スタートボタンを押さないように与えられる

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> 

を得ました。

私はあるBEST_EFFORT値のためのライブラリでコードを確認:

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

だから私は、デバイスが動いていない場合でも、更新ごとに2500 millisecsを期待。 誰かが私を正しい方向に向けることができたら、私は感謝します。

+0

私も同じ問題に直面しています。 onLocationUpdatedは、私が開始したときに一度呼び出すが、その後は更新がない。お返事ありがとうございます – kiruba

答えて

-1

GoogleFuse APIを使用する方がはるかに優れています。 HereはこのApiの完全なドキュメントです。位置追跡にGithubライブラリを使用するよりもはるかに優れています。

+0

気をつけて説明してください。ライブラリは、必要に応じてAndroid Location Fused Providerや他のプロバイダを抽象化しているようです。 –

+0

@IvoPereira ..スマートロケーションライブラリは、ロケーションバリエーションの変更を処理するように変更することができます。抽象ライブラリを使用する初心者の方はおすすめできません...スマートロケーションライブラリには、アクティビティの認識など必要な機能はありませんapkを大きくする。私は抽象ライブラリを使うことに反対しているのではなく、私たちが作成した他のライブラリのソースを学習し使用することになると、ソースを最初に習得してからライブラリを使用するほうがずっと良いです。 –

12

ロケーションリスナーの作成中にcontinuous()と言う必要があります。 下記のコードスニペットを試してください。

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

その最新の返信です!とにかくこれは誰かを助けるでしょう。