2016-01-27 54 views
6

我正在嘗試使用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()); 
} 

此代碼是logcat的輸出我

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> 

這是作爲我按startButton儘快安排,則沒有更多的價值。

我檢查了圖書館BEST_EFFORT值是代碼:

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

所以我希望一次更新2500的毫秒即使設備不移動。 如果有人能指出我正確的方向,我將不勝感激。

+0

我也面臨同樣的問題。 onLocationUpdated正在調用一次,當我開始啓動,但在那之後沒有更新。感謝您的回覆 – kiruba

回答

-1

它更好地使用GoogleFuse Api。 Here是該Api.Its的完整文檔,比使用Github庫進行位置跟蹤要好得多。

+0

謹慎解釋原因?該庫似乎在需要時抽象出Android位置融合提供商和其他一些提供商。 –

+0

@IvoPereira ..智能位置庫可以改變,以處理位置變化的變化..雖然對於使用抽象圖書館的新手不應該推薦... smartv位置庫還具有adidtional功能,如活動識別等不需要並使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); 
       } 
      }); 
} 

它的最新回覆!無論如何,這將有助於某人。