Ich bin ein wenig hier kämpfen, verwende ich Fused API für das Erhalten von Standortaktualisierungen. Meine Absicht ist, einen Weg auf Karte zu zeichnen, wenn Benutzer geht.Android Fused Standort API gibt ungenau Standort in onLocationChanged
Ich habe realisiert, dass Sie wie folgt vor:
@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;
}
dann fange ich das Zeug durch die Methode folgende
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;
}
}
& Hier erhalte ich die Location Update
@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);
}
}
Jetzt ist das Problem ist, onLocationChanged
gibt Standort mit lat-lng wer Der Unterschied/Abstand vom letzten Standort beträgt ca. 5-90 Meter, auch wenn das Gerät am selben Ort steht. Fehle ich etwas?
btw, hier ist die Methode, die den Abstand von zwei lat-lngs zurück, die ich
private double getDistanceBetweenTwoLacation(Location origin, Location destination) {
return origin.distanceTo(destination);
}
Machst du all diese Tests drinnen? Wenn ja, ist es normal, dass es viel herumspringt. Überprüfen Sie den Genauigkeitswert und Sie werden sehen, dass er ziemlich hoch ist, was auf eine große Unsicherheit in der Position hinweist. – alzee
Welche Berechtigung haben Sie im Manifest? –
@ user3137702 ja, ich tue Prüfung drinnen ... –