2013-06-23 74 views
1

我正在使用google play服務api在我的應用中獲取位置更新。但是,由於某種原因,客戶端連接時client.getLastLocation()不會更改其值。只有在通過註冊偵聽器請求位置更新後,位置纔會改變。我認爲這可能只是一個模擬器問題,但即使使用ddms或telnet手動更改位置,getLastLocation()的值仍然不會更改。LocationClient不更新模擬器上的getLastLocation()

不幸的是,我的手機沒有顯示在adb中,所以我無法在實際設備上進行測試,但是有沒有人對此有何看法?這不是什麼大問題,因爲我可以通過請求位置更新來解決問題,但我想提供一個設置,以允許用戶手動更新其位置,而不是每隔幾秒就上傳一次。一些代碼來顯示我在說什麼。

@Override 
public void onClick(View v) { 
    Location newLocation = client.getLastLocation(); 
    if(newLocation == null) 
    { 
     Toast.makeText(getActivity(), "Finding location", Toast.LENGTH_SHORT).show(); 
     return; 
    } 
    if(distanceSignificant(currentLocation, newLocation)) 
    { 
     currentLocation = newLocation; 
     Log.d(TAG, "distance significant, updating location"); 
      uploadNewLocation(); 
     } 
    } 
}); 

每當我點擊那個按鈕,該位置將與上次的位置相同。

@Override 
public void onConnected(Bundle data) { 
    Log.d(TAG, "connected to locations"); 
    Toast.makeText(getActivity(), "Starting location services", Toast.LENGTH_SHORT).show(); 
    currentLocation = client.getLastLocation(); 

    if(currentLocation == null) 
    { 
     Log.d(TAG, "can't add user location yet, not available"); 
    } 

    if(shouldUpdate) 
    { 
     client.requestLocationUpdates(locationRequest, this); 
     updateButton.setVisibility(View.GONE); 
    } 
    else 
    { 
     updateButton.setVisibility(View.VISIBLE); 
    } 

} 

在這種情況下,shouldUpdate在onCreateView中設置並由用戶設置進行設置。

有誰知道我應該怎麼做才能解決這個問題?我覺得我錯過了簡單的事情。

回答

3

發生這種情況是因爲getLastLocation是獲取最後一個已知位置的非阻塞親電池調用(這可能是舊值),並且當沒有任何活動檢索位置更新時,它不會被神奇地更改。

您可以做的最好的事情是獲取位置的用戶請求,開始請求位置更新並在獲取第一個位置時停止位置更新。