I don't understand, the Interval in milliseconds works well, but the minimum distance doesn't work. How to get the onLocationResult be triggered all the 30m of displacement in a LocationRequest with the locationCallback ?
if (locationRequest == null) {
locationRequest = new LocationRequest();
if (drivingtype == Constants.DRIVING_TYPE_BICYCLE) {
locationRequest.setInterval(Constants.GPS_UPDATE_TIMING_PRECISION);
locationRequest.setFastestInterval(Constants.GPS_UPDATE_PRECISION);
locationRequest.setSmallestDisplacement(30f);
} else {
locationRequest.setInterval(Constants.GPS_UPDATE_TIMING_PRECISION);
locationRequest.setFastestInterval((Constants.GPS_UPDATE_PRECISION) / 4);
locationRequest.setSmallestDisplacement(30f);
}
locationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER );
}
if (locationCallback == null) {
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Location location = locationResult.getLastLocation();
if (location != null) {
// Traitement des mises à jour de localisation
// La position a changé. Obtenez les coordonnées et mettez à jour la carte.
latitude = location.getLatitude();
longitude = location.getLongitude();
SOLUTION:
Based on the answer proponed by @Jemshit,
//Time
if (locationRequest == null) {
locationRequest = LocationRequest.create();
if (drivingtype == Constants.DRIVING_TYPE_BICYCLE) {
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// locationRequest.setSmallestDisplacement(Constants.GPS_UPDATE_PRECISION);
locationRequest.setInterval(Constants.GPS_UPDATE_TIMING_PRECISION); // Update location every 1 minute
locationRequest.setFastestInterval(10000);
} else {
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// locationRequest.setSmallestDisplacement(Constants.GPS_UPDATE_PRECISION / 4);
locationRequest.setInterval(Constants.GPS_UPDATE_TIMING_PRECISION); // Update location every 1 minute
locationRequest.setFastestInterval(10000);
}
}
if (locationCallback == null) {
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Location location = locationResult.getLastLocation();
if (location != null) {
// Traitement des mises à jour de localisation
// La position a changé. Obtenez les coordonnées et mettez à jour la carte.
latitude = location.getLatitude();
longitude = location.getLongitude();
map.getOverlays().clear();
// Mettez à jour la carte avec la nouvelle position.
// Par exemple, utilisez les fonctions de OsmAnd pour déplacer la caméra ou ajouter un marqueur.
GeoPoint currentPosition = new GeoPoint(latitude, longitude);
//moveMapCameraToPosition(currentPosition); // Déplace la caméra vers la nouvelle position
animateMapCameraToPosition(currentPosition);
map.getOverlays().remove(accuracyOverlay);
int greenColorWithOpacity = Color.argb(128, 0, 255, 0);
accuracyOverlay = new AccuracyOverlay(new GeoPoint(location), Constants.ACCURACYOVERLAYPRECISION, greenColorWithOpacity);
map.getOverlayManager().getTilesOverlay().setLoadingBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
map.getOverlays().add(accuracyOverlay);
map.invalidate();
// Vous pouvez également ajouter un marqueur à la position actuelle
addMarkerToPosition(currentPosition);
// Envoi de la position à l'API
sendPositionToAPI(latitude, longitude);
}
}
};
}
//Distance
if (locationRequest2 == null) {
locationRequest2 = new LocationRequest();
if (drivingtype == Constants.DRIVING_TYPE_BICYCLE) {
locationRequest2.setSmallestDisplacement(Constants.GPS_UPDATE_PRECISION);
} else {
locationRequest2.setSmallestDisplacement(Constants.GPS_UPDATE_PRECISION);
}
locationRequest2.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY );
}
if (locationCallback2 == null) {
locationCallback2 = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Location location = locationResult.getLastLocation();
if (location != null) {
// Traitement des mises à jour de localisation
// La position a changé. Obtenez les coordonnées et mettez à jour la carte.
latitude = location.getLatitude();
longitude = location.getLongitude();
map.getOverlays().clear();
// Mettez à jour la carte avec la nouvelle position.
// Par exemple, utilisez les fonctions de OsmAnd pour déplacer la caméra ou ajouter un marqueur.
GeoPoint currentPosition = new GeoPoint(latitude, longitude);
//moveMapCameraToPosition(currentPosition); // Déplace la caméra vers la nouvelle position
animateMapCameraToPosition(currentPosition);
map.getOverlays().remove(accuracyOverlay);
int greenColorWithOpacity = Color.argb(128, 0, 255, 0);
accuracyOverlay = new AccuracyOverlay(new GeoPoint(location), Constants.ACCURACYOVERLAYPRECISION, greenColorWithOpacity);
map.getOverlayManager().getTilesOverlay().setLoadingBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.black));
map.getOverlays().add(accuracyOverlay);
map.invalidate();
// Vous pouvez également ajouter un marqueur à la position actuelle
addMarkerToPosition(currentPosition);
// Envoi de la position à l'API
sendPositionToAPI(latitude, longitude);
}
}
};
}
Looper mainLooper = Looper.getMainLooper();
Looper mainLooper2 = Looper.getMainLooper();
if (!locationUpdatesEnabled) {
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, mainLooper);
fusedLocationClient2.requestLocationUpdates(locationRequest2, locationCallback2, mainLooper2);
locationUpdatesEnabled = true;
}
}