Aller au contenu

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_LOCATION
    • ACCESS_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 :

  1. Vérifier les services de localisation : Lance GPS-ERROR-003 si le GPS est désactivé
  2. Vérification des permissions : Lance GPS-ERROR-004 si ACCESS_FINE_LOCATION n'est pas accordée
  3. Échantillon GPS A : Première position — lance GPS-ERROR-001 sur timeout, GPS-ERROR-002 si null, GPS-ERROR-005 si la précision dépasse le seuil
  4. Enregistrer tA : Capture System.nanoTime() après l'échantillon A
  5. Attente : Pause de sample_interval_ms millisecondes
  6. Échantillon GPS B : Mêmes vérifications que l'échantillon A
  7. Enregistrer tB : Capture System.nanoTime() après l'échantillon B
  8. Calculer delta : deltaSec = (tB - tA) / 1e9 — lance GPS-ERROR-006 si < 0,2 s
  9. Calculer vitesse : speedKmh = (distanceM / deltaSec) × 3,6
  10. Résultat : Retourne GetSpeedTaskResult avec speed_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.

"location_timeout_ms": 15000
  • Défaut : 10000 ms
  • 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.

"sample_interval_ms": 5000
  • Défaut : 10000 ms (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.

"max_speed_accuracy_km_h": 50
  • 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.

"speed_kmh_output": "$SPEED_KMH"

distance_m_output — Distance en mètres

Stocke la distance parcourue entre les deux échantillons GPS, en mètres, arrondie à 3 décimales.

"distance_m_output": "$DISTANCE_M"

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.

"accuracy_used_km_h_output": "$GPS_ACCURACY"

Exemple JSON complet

{
  "GetCurrentSpeed": [
    {
      "id": "-1",
      "title": "Vitesse Actuelle",
      "location_timeout_ms": 15000,
      "sample_interval_ms": 5000,
      "max_speed_accuracy_km_h": 100,
      "speed_kmh_output": "$SPEED_KMH",
      "distance_m_output": "$DISTANCE_M",
      "accuracy_used_km_h_output": "$GPS_ACCURACY"
    }
  ]
}