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();
1

There are 1 best solutions below

0
ΩlostA On BEST ANSWER

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;
        }
       }