2016-12-21 145 views
2

在我的android應用程序中,我使用下面的代碼來獲取用戶的當前位置。android - 停止接收位置更新

private void getDeviceLocation() { 
    Boolean mLocationPermissionGranted = //ask for permission and stuff 
    if (mLocationPermissionGranted) { //if permission granted 
     mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
    } 
} 

我只想要1次位置更新,所以我removeLocationUpdatesonLocationChanged方法內。

@Override 
public void onLocationChanged(Location location) { 
    mCurrentLocation = location; 
    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
} 

做的是停止調用onLocationChanged方法,但我看到,我的位置還是在不斷變化過幾秒在地圖上。精度半徑不斷增加或減小。我不想那樣。我希望「藍點」穩定而不移動。

+0

你可能有使用了'mGoogleMap.setMyLocationEnabled(true);'。該功能讓Google地圖無需您提供更多代碼即可訪問用戶的位置信息。它可以是有用的,因爲它不能。 – Gorcyn

+0

@Gorcyn ya,我已經使用了'setMyLocationEnabled(true)',但將其設置爲false只會刪除「藍點」。問題仍然存在 –

回答

1

首先,藍點有自己的位置源。在設置setMyLocationEnabled(true)後,它將開始查明您的位置。 因此,藍點與您的位置請求無關。

Documentation說,對MyLocationLayer(藍點)

雖然啓用和位置可用中,我的位置層 不斷吸引用戶的當前位置

手段的指示,只要MyLocationLayer接收到新位置,藍點就會移動。

但有一種方法來改變這種行爲:setLocationSource (LocationSource source)

Documentation說,對setLocationSource

替換我的定位層的位置源。

意味着,你可以在你的位置要求和行爲(如你所願只有一個位置)集成到藍點(MyLocationLayer)

檢查這個sample,究竟你需要什麼

+0

這非常有幫助,非常感謝! –