Comment compter la vitesse en fonction des étapes

J'ai une application de compteur d'étapes dans laquelle je gère un service qui compte les étapes prises puis envoie une émission au fragment qui est ensuite mis à jour sur le fragment. Le comptage des étapes fonctionne bien, mais je veux calculer la vitesse en fonction des étapes. Voici ce que j'essaye en ce moment.

Le récepteur pour obtenir le décompte:

  • Android Studio crée des saveurs - Comment avoir les mêmes fichiers source dans des arômes variés
  • Comment supprimer l'avertissement "Éviter d'utiliser l'extension de version de Google Play SDK"?
  • Android import java.nio.file.Files; ne peut pas être résolu
  • Android: comment marquer sms comme lu sur onReece
  • Android: créez une caméra virtuelle ou écrasez-vous le flux de caméra réel? (/ Dev / msm_camera / frame0, v4l2loopback)?
  • Quel est le meilleur remplacement pour une galerie dans Android?
  • receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int steps = intent.getIntExtra(StepCounterService.STEP_INCREMENT_KEY, 0); if (firstStepTime.equals("0")) { firstStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY); } else if (secondStepTime.equals("0")) { secondStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY); } else { firstStepTime = secondStepTime; secondStepTime = intent.getStringExtra(StepCounterService.TIME_STAMP_KEY); } updateAllUI(steps); } }; 

    Donc, ce que je fais est dès que je commence à démarrer, je vois si la variable firstStepTime est vide. Si c'est le cas, je sauvegarde le temps dans la variable firstStepTime . Dans l'étape suivante, je vois si secondStepTime est vide, et si c'est le cas, je sauvegarde ce temps dans la variable secondStepTime . Maintenant, pour les prochaines étapes, ces dernières sont mises à jour.

     public void updateAllUI(int numberOfSteps) { if (!(firstStepTime.equals("0")) && !(secondStepTime.equals("0"))) { try { Calendar c = Calendar.getInstance(); SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SSS"); timeDifference = timeFormat.parse(secondStepTime).getTime() - timeFormat.parse(firstStepTime).getTime(); speed = (float) ((0.0254 / (timeDifference * 0.001)) * 3.6); } catch (Exception e) { timeDifference = 0; speed = 0; } textview.settext(speed +"Km/h); } } 

    Donc, dans ce cas, je vérifie si les deux ne sont pas vides, je prends les valeurs et calcules la différence de temps. Le problème ici est parfois qu'il ne compte pas correctement la vitesse. Et un problème plus important est que si l'utilisateur s'arrête, la vitesse reste constante et ne baisse pas à zéro.

    Je veux savoir s'il y a une meilleure façon de calculer la vitesse?

    3 Solutions collect form web for “Comment compter la vitesse en fonction des étapes”

    Comme vous ne comptez que des étapes et souhaitez calculer la vitesse avec les étapes prises, je suppose que vous ne souhaitez pas utiliser le GPS pour compter la vitesse ou si vous souhaitez fournir un compteur de vitesse de sauvegarde si le GPS n'est pas là.

    Vous pouvez commencer un nouveau fil en faisant

      int interval=1*1000; //specifying interval to check steps Handler.postDelayed(mySpeedChecker(),1000); 

    Vous devrez faire cela pour chaque étape prise

     public void mySpeedChecker(){ // assuming steps taken stored in a global variable // and there is one more variable which is updated by this function // to store number of steps before as global variable to calculate number of steps in time interval. // this should check if another step has been taken in the interval to check // if stepsTaken>0 then speed is not zero and you'll know how much steps are taken // if zero steps are taken then speed is zero // also it will tell you number of steps taken in last second // so you can use this to calculate and update speed // increase the interval for high accuracy but lower frequency of updates } 

    En outre, il est judicieux de calculer la longueur de la foulée de l'utilisateur lorsque le GPS est disponible afin que, chaque fois que l'utilisateur utilise le GPS, la longueur de la longueur peut être calculée en décrivant la distance parcourue / nombre d'étapes prises à l'aide du GPS, cela aidera votre système Calculez exactement la distance parcourue par l'utilisateur avec l'aide du nombre d'étapes prises.

    La manière habituelle de calculer la vitesse idéalement serait d'utiliser Location.getSpeed ​​(), ou une analyse sur les valeurs de l'accéléromètre. Mais je suppose que vous voulez l'obtenir en fonction des étapes comptées.

    Pour résoudre l'un des problèmes: "si l'utilisateur s'arrête, la vitesse reste constante et ne tombe pas à zéro".

    Vous pouvez utiliser l'Api de reconnaissance d'activité Android pour voir l'activité actuelle des utilisateurs. Utilisation

     ActivityRecognition.getMostProbableActivity() 

    Si l'activité détectée est type STILL, vous pouvez définir votre vitesse à zéro.

    Vous pouvez également obtenir la confiance DetectedActivity.getConfidence () pour être sûr.

    Pour l'autre problème lorsque vous avez dit qu'il ne compte pas correctement la vitesse, pourriez-vous en savoir plus sur cette question?

    Toutes les informations provenant des capteurs ont une quantité d'erreur et même des données perdues.

    Vous devez stocker les informations reçues dans une file d'attente ou une base de données, y compris l'horodatage.

    Périodiquement, vous choisissez les données et l'analyses, y compris le filtrage pour obtenir une information plus précise.

    J'espère que cela aide.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.