2
我在這裏苦苦掙扎,我使用Fused API獲取位置更新。我的目的是在用戶走路時在地圖上繪製路徑。Android Fused Location API在onLocationChanged中給出的位置不準確
我已經實施瞭如下:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.map_layout, container, false);
// some other initialization
//....
//
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
return view;
}
然後我開始的東西通過以下方法
private void startReceivingLocationUpdates() {
if (checkGPSPermission() && mGoogleApiClient.isConnected() && !isReceivingLocationUpdates) {
LocationRequest locationRequest = new LocationRequest();
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(5000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
locationRequest, this);
isReceivingLocationUpdates = true;
}
}
&在這裏,我收到位置更新
@Override
public void onLocationChanged(Location location) {
if(getDistanceBetweenTwoLacation(mCoordinates.get(mCoordinates.size() - 1), location) > 3d) {
for(int i= 0; i < mCoordinates.size(); i++) {
Location locationTemp = mCoordinates.get(i);
Log.d(TAG, "i => " + i + " Lat => " + String.valueOf(locationTemp.getLatitude()) + " Lng => " + String.valueOf(locationTemp.getLongitude()));
}
if(mCoordinates.size() > 0)
Log.d(TAG, "lat difference is => " + getDistanceBetweenTwoLacation(mCoordinates.get(mCoordinates.size() - 1), location));
mCoordinates.add(location);
}
}
現在的問題是,onLocationChanged
給lat-lng誰的位置即使設備在同一地點穩定,與過去地點的差異/距離也大約是5-90米。我錯過了什麼嗎?
順便說一句,這裏的返回從兩個緯度和經度,我使用
private double getDistanceBetweenTwoLacation(Location origin, Location destination) {
return origin.distanceTo(destination);
}
你在室內做所有這些測試嗎?如果是這樣,它是很常見的跳躍很多。檢查準確度值,你會發現它很高,表明很多位置的不確定性。 – alzee
你在清單中有什麼權限? –
@ user3137702是的,我在做室內測試... –