Android – Acceleration down (smash)


Vidéo expliquant pour ceux qui ne comprennent pas


CETTE RÉPONSE N'EST PAS CORRECTEMENT RÉPONDEE VEUILLEZ TROUVER POUR LA RESPONTER AVEC UNE AUTRE SOLUTION (100 Bounty est périmé)

Même question mais mieux expliquée

Cette question a été acceptée comme correcte, mais ce n'est pas du tout, je l'ai essayé avec mon ancien appareil ZTE et cela a fonctionné la plupart du temps, mais maintenant j'ai un Samsung Galazy A5 2016 et ça ne fonctionne pas, ni sur un LG G3 .

  • Manipulation de plusieurs géo-phases de transition avec zone commune
  • Comment puis-je obtenir une miniature de la vidéo à partir de l'URL à distance pour Android 4.0 et plus?
  • Comment savoir si un périphérique Android possède des clés
  • ListView affiche brièvement le message vide avant que les données ne soient chargées
  • Comment produire des messages sur la console Eclipse lors du développement pour Android
  • Android Studio 2.0 - NoSuchAlgorithmException: SHA256WITHDSA Signature non disponible
  • La chose est en train d'essayer l'utilisation d'un Accelerometer et de certains Sensors je dois pouvoir détecter l'un de ces deux mouvements que j'ai faits sur la vidéo.

    Il y a deux mouvements:

    • Le briser (avec un peu de vitesse)
    • Chute libre

    Je vous laisse décider et me convaincre quelle est la meilleure option et plus facile à faire, mieux c'est que cela fonctionne sur la plupart des appareils.

  • Android: téléchargez un fichier unique dans de nombreuses parties
  • 2 Solutions collect form web for “Android – Acceleration down (smash)”

    Un appareil stationnaire aura une valeur de gravité de +9,81, ce qui correspond à l'accélération de l'appareil (0 m / s2 moins la force de gravité, soit -9,81 m / s2). Ainsi, si l'appareil se déplace vers le bas de l'appareil fixe, la gravité sera inférieure à 9,81. Un dispositif de chute libre aura une gravité égale à 0.

    Voici comment déterminer si le périphérique commence à se déplacer vers le bas. Il ne sera pas en mesure de déterminer si le dispositif se déplace vers le bas si l'appareil se déplace déjà vers le bas avec une vitesse constante, car dans ce cas, il n'y a pas d'accélération vers le bas et la norme de gravité devrait être d'environ 9.81.

    Vous devez utiliser TYPE_GRAVITY . Si le périphérique n'a pas TYPE_GRAVITY , passez le filtre passe bas TYPE_ACCELEROMETER pour obtenir le vecteur de gravité.

    Comme ci-dessus, un dispositif stationnaire aura un vecteur de gravité avec une norme égale à 9,81. Toutefois, cette valeur varie légèrement avec les appareils. Ainsi, il faut d'abord déterminer cette norme de gravité stationnaire. Vous pouvez le faire en vous inscrivant à TYPE_GRAVITY ou TYPE_ACCELEROMETER et demandez à l'utilisateur de poser l'appareil à plat, puis appuyez sur un bouton. Une fois que le bouton est pressé, l'application calculera la norme de gravité dans onSensorChanged.

     private float mStationaryGravityNorm; private float mDeviation = 0.01; private float mCount; private boolean mIsCalculatingStationGravityNorm = true; Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener( { @Override public void onClick(View v) { // register sensor } }); @Override public void onSensorChanged(SensorEvent event) { // Will average out 100 gravity values. if (mIsCalculatingStationGravityNorm) { if (mCount++ < 100) { mStationaryGravityNorm += Math.sqrt(event.values[0] * event.values[0] + event.values[1] * event.values[1] + event.values[2] * event.values[2]); } else { mStationaryGravityNorm /= 100; mIsCalculatingStationGravityNorm = false; } else { float gravityNorm = Math.sqrt(event.values[0] * event.values[0] + event.values[1] * event.values[1] + event.values[2] * event.values[2]); if (gravityNorm < mStationaryGravityNorm - mDeviation) { // moving down } } 

    PS Pour déplacer vers le bas, vous voulez calculer la gravité. Lorsque l'appareil est stationnaire, la norme de gravité est d'environ 9,81 (selon l'appareil). Maintenant, si l'appareil se déplace vers le bas, il y a une accélération vers le bas, donc la norme de gravité sera inférieure à 9,81 et si l'appareil avance, la norme de gravité sera supérieure à 9,81. Donc, en comparant la norme de gravité à cette norme de gravité stationnaire, vous saurez si l'appareil se déplace vers le haut ou vers le bas. Ceci est indépendant de l'orientation du périphérique. TYPE_GRAVITY donnera une meilleure précision, mais si le périphérique n'a pas ce type, le filtre passe-bas TYPE_ACCELERATOR vous donnera le vecteur de gravité.

    Si vous voulez voir si l'appareil est en chute libre, vérifiez si la normale est plus proche de zéro. http://developer.android.com/guide/topics/sensors/sensors_motion.html

     public void onSensorChanged(SensorEvent event) { double noraml = Math.sqrt(Math.pow(event.values[0].getX(),2)+ Math.pow(event.values[1].getY(),2)+ Math.pow(event.values[2].getZ(),2)); if (normal < 0) return true; return false; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.