Vitesse Actuelle
Résumé
- Nom interne :
GetCurrentSpeed - Catégorie : Localisation
- Objectif : Mesurer la vitesse actuelle de l'appareil en km/h à l'aide de deux échantillons GPS séparés par un intervalle configurable.
- Type de tâche : Normale
Compatibilité
-
Version minimale AndroMate :
1.1.0 -
Version maximale AndroMate :
1.1.0 -
Android minimum :
Android 13 (API 33) -
Android maximum testé :
Android 16 (API 36) -
Constructeurs supportés :
- ✅ Tous les constructeurs (testé sur Samsung One UI 6.x / 7.x / 8.x et Google Pixel Android Stock)
-
Permissions requises :
ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION- Les services de localisation doivent être activés sur l'appareil
Description détaillée
La tâche GetCurrentSpeed calcule la vitesse de déplacement de l'appareil en prenant deux échantillons GPS séparés par un intervalle configurable, puis en calculant distance ÷ temps.
Elle est utilisée pour :
- Mesurer la vitesse en temps réel (km/h)
- Calculer la distance parcourue (mètres) sur l'intervalle d'échantillonnage
- Filtrer les échantillons GPS par seuil de précision
- Associer les métriques de vitesse aux rapports de télémétrie ou de supervision
La tâche gère :
- un délai d'expiration GPS configurable (
location_timeout_ms), - un intervalle d'échantillonnage configurable (
sample_interval_ms), - un seuil maximal de précision GPS (
max_speed_accuracy_km_h), - le calcul de la vitesse en km/h et de la distance en mètres (arrondis à 3 décimales).
Paramètres d'entrée
| Paramètre | Type | Obligatoire | Valeurs possibles | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|---|
location_timeout_ms |
Integer | Non | Temps en millisecondes | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | 10000 |
sample_interval_ms |
Integer | Non | Temps en millisecondes | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | 10000 |
max_speed_accuracy_km_h |
Integer | Non | Seuil de précision en mètres | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | 1000 |
Paramètres de sortie
| Champ | Type | Condition de déclenchement | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|
speed_kmh_output |
Float | Lorsque le calcul est réussi | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
distance_m_output |
Float | Lorsque le calcul est réussi | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
accuracy_used_km_h_output |
Float | Lorsque le calcul est réussi | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
Exceptions
| Code | Description |
|---|---|
GPS-ERROR-001 |
Échec de l'obtention de la position GPS dans le délai location_timeout_ms. |
GPS-ERROR-002 |
Le fournisseur GPS a retourné une position nulle. |
GPS-ERROR-003 |
Les services de localisation sont désactivés sur l'appareil. |
GPS-ERROR-004 |
L'application ne dispose pas de la permission ACCESS_FINE_LOCATION. |
GPS-ERROR-005 |
La précision GPS dépasse le seuil max_speed_accuracy_km_h. |
GPS-ERROR-006 |
Le delta temps entre les deux échantillons GPS est trop petit (< 0,2 s) — impossible de calculer une vitesse fiable. |
Diagramme d'exécution
flowchart TD
Start([▶ GetCurrentSpeed]) --> CheckGps{Services de\nlocalisation activés ?}
CheckGps -->|Non| E3[❌ GPS-ERROR-003\nLocalisation désactivée]
CheckGps -->|Oui| CheckPerm{ACCESS_FINE_LOCATION\naccordée ?}
CheckPerm -->|Non| E4[❌ GPS-ERROR-004\nPas de permission]
CheckPerm -->|Oui| GetA[📍 Échantillon GPS A\nPriorité : HAUTE_PRÉCISION\nTimeout : location_timeout_ms]
GetA -->|Timeout| E1[❌ GPS-ERROR-001\nTimeout GPS]
GetA -->|Succès| NullA{locA == null ?}
NullA -->|Oui| E2[❌ GPS-ERROR-002\nPosition nulle]
NullA -->|Non| AccA{locA.accuracy >\nmax_speed_accuracy_km_h ?}
AccA -->|Oui| E5[❌ GPS-ERROR-005\nPrécision insuffisante]
AccA -->|Non| StoreA[⏱️ tA = System.nanoTime\nAttente sample_interval_ms]
StoreA --> GetB[📍 Échantillon GPS B\nPriorité : HAUTE_PRÉCISION\nTimeout : location_timeout_ms]
GetB -->|Timeout| E1
GetB -->|Succès| NullB{locB == null ?}
NullB -->|Oui| E2
NullB -->|Non| AccB{locB.accuracy >\nmax_speed_accuracy_km_h ?}
AccB -->|Oui| E5
AccB -->|Non| Calc[🔢 tB = System.nanoTime\ndistanceM = locA.distanceTo locB\ndeltaSec = tB - tA / 1e9]
Calc --> CheckDelta{deltaSec <= 0,2s ?}
CheckDelta -->|Oui| E6[❌ GPS-ERROR-006\nDelta trop petit]
CheckDelta -->|Non| Speed[speedKmh = distanceM / deltaSec × 3,6\nArrondir à 3 décimales]
Speed --> Success([✅ GetSpeedTaskResult\nspeed_kmh_output\ndistance_m_output\naccuracy_used_km_h_output])
E1 --> Error([❌ Exception])
E2 --> Error
E3 --> Error
E4 --> Error
E5 --> Error
E6 --> Error
style Start fill:#e3f2fd
style Success fill:#c8e6c9
style Error fill:#ffcdd2
style Calc fill:#fff9c4
style Speed fill:#fff9c4
style StoreA fill:#f3e5f5
style E1 fill:#ffcdd2
style E2 fill:#ffcdd2
style E3 fill:#ffcdd2
style E4 fill:#ffcdd2
style E5 fill:#ffcdd2
style E6 fill:#ffcdd2
Comment ça fonctionne :
- Vérifier les services de localisation : Lance
GPS-ERROR-003si le GPS est désactivé - Vérification des permissions : Lance
GPS-ERROR-004siACCESS_FINE_LOCATIONn'est pas accordée - Échantillon GPS A : Première position — lance
GPS-ERROR-001sur timeout,GPS-ERROR-002si null,GPS-ERROR-005si la précision dépasse le seuil - Enregistrer tA : Capture
System.nanoTime()après l'échantillon A - Attente : Pause de
sample_interval_msmillisecondes - Échantillon GPS B : Mêmes vérifications que l'échantillon A
- Enregistrer tB : Capture
System.nanoTime()après l'échantillon B - Calculer delta :
deltaSec = (tB - tA) / 1e9— lanceGPS-ERROR-006si < 0,2 s - Calculer vitesse :
speedKmh = (distanceM / deltaSec) × 3,6 - Résultat : Retourne
GetSpeedTaskResultavecspeed_kmh_output,distance_m_output,accuracy_used_km_h_output(chaque valeur arrondie à 3 décimales)
Détails des paramètres d'entrée
1. Paramètre d'entrée : location_timeout_ms
Temps maximal (en millisecondes) d'attente pour chaque échantillon GPS avant de lancer GPS-ERROR-001.
- Défaut :
10000ms - Appliqué aux échantillons GPS A et B indépendamment.
2. Paramètre d'entrée : sample_interval_ms
Temps d'attente (en millisecondes) entre l'échantillon GPS A et l'échantillon GPS B.
- Défaut :
10000ms (10 secondes) - Des intervalles plus longs améliorent la précision pour les mouvements lents.
3. Paramètre d'entrée : max_speed_accuracy_km_h
Précision GPS maximale autorisée (en mètres). Les échantillons avec une précision inférieure sont rejetés avec GPS-ERROR-005.
- Défaut :
1000(très permissif — accepte quasiment toutes les lectures GPS)
Détails des paramètres de sortie
speed_kmh_output — Vitesse en km/h
Stocke la vitesse calculée arrondie à 3 décimales.
distance_m_output — Distance en mètres
Stocke la distance parcourue entre les deux échantillons GPS, en mètres, arrondie à 3 décimales.
accuracy_used_km_h_output — Précision GPS utilisée
Stocke la pire précision GPS parmi les deux échantillons (en mètres), arrondie à 3 décimales.