Je dois ajouter une fonction de secousse qui rafraîchira mon application Android.
Tout ce que je trouve de la documentation implique l'implémentation de la SensorListener
, mais Eclipse me dit qu'elle est obsolète et suggère SensorEventListener
.
Quelqu'un qui a un bon guide sur la façon de créer cela shake controller
?
Réponses:
Voici un exemple de code. Mettez ceci dans votre classe d'activité:
Et ajoutez ceci à votre méthode onCreate:
Vous pouvez ensuite demander "mAccel" où vous voulez dans votre application pour l'accélération actuelle, indépendante de l'axe et nettoyée des accélérations statiques telles que la gravité. Ce sera environ. 0 s'il n'y a pas de mouvement et, disons> 2 si l'appareil est secoué.
Sur la base des commentaires - pour tester cela:
Remarques:
L'accélomètre doit être désactivé onPause et activé onResume pour économiser les ressources (CPU, batterie). Le code suppose que nous sommes sur la planète Terre ;-) et initialise l'accélération de la gravité terrestre. Sinon, vous obtiendrez une forte secousse lorsque l'application démarre et "frappe" le sol de la chute libre. Cependant, le code s'habitue à la gravitation due au filtre coupe-bas et fonctionnerait également sur d'autres planètes ou dans l'espace libre, une fois qu'il serait initialisé. (vous ne savez jamais combien de temps votre application sera utilisée ... ;-)
la source
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
censée êtremAccel = mAccel * 0.9f + delta * 0.1f; // perform low-cut filter
?Calendar last = Calendar.getInstance(); Calendar now = Calendar.getInstance(); last.setTime(last_date); now.setTime(new Date()); long diff = now.getTimeInMillis() - last.getTimeInMillis(); if(diff >= 750) { ... }
noms de méthode doivent être corrects (je n'ai pas le code avec moi ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
place pour éviter une conversionVoici mon code pour la détection des gestes tremblants:
Ajoutez ceci dans votre activité:
...
dans onCreate () ajoutez:
et:
la source
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
dans onCreate (). Sinon, ça marche à merveille! Merci!Voici encore une autre implémentation qui s'appuie sur certains des conseils ici ainsi que sur le code du site des développeurs Android.
MainActivity.java
ShakeDetector.java
la source
DoShake()
fonction?J'ai vraiment aimé la réponse de Peterdk. Je pris sur moi de faire une coulpe de réglages à son code.
fichier: ShakeDetector.java
N'oubliez pas non plus que vous devez enregistrer une instance de ShakeDetector auprès de SensorManager.
la source
SHAKE_THRESHOLD_GRAVITY
à 1.7F pour empêcher les lecteurs de penser que cette réponse ne fonctionne pas car ils doivent trembler assez fort en raison de la valeur définie à 2,7F .count
variable dans onShake vous indique combien de fois l'appareil a été secouéSystemClock.elapsedRealtime()
plutôt queSystem.currentTimeMillis()
et initialiserais mShakeTimestamp avec la même méthode plutôt qu'avec 0Je développe une application de détection de mouvement et de détection de tremblement pour mon projet universitaire.
Outre la cible d'origine de l'application, je sépare la partie bibliothèque (responsable de la détection des mouvements et des secousses) de l'application. Le code est gratuit, disponible sur SourceForge avec le nom de projet "BenderCatch". La documentation que je produis sera prête vers la mi-septembre. http://sf.net/projects/bendercatch
Il utilise un moyen plus précis pour détecter le tremblement: observe à la fois la différence de force entre SensorEvents ET les oscillations présentes dans les axes X et Y lorsque vous effectuez un tremblement. Il peut même émettre un son (ou vibrer) à chaque oscillation du shake.
N'hésitez pas à m'en demander plus par e-mail à raffaele [at] terzigno [dot] com
la source
J'ai écrit un petit exemple pour détecter les secousses verticales et horizontales et montrer a
Toast
.la source
Vous pouvez utiliser la sismique . Un exemple peut être trouvé ici .
la source
J'ai essayé plusieurs implémentations, mais j'aimerais partager la mienne. Il utilise
G-force
comme unité pour le calcul du seuil. Cela facilite un peu la compréhension de ce qui se passe, ainsi que la définition d'un bon seuil.Il enregistre simplement une augmentation de la force G et déclenche l'auditeur s'il dépasse le seuil. Il n'utilise aucun seuil de direction, car vous n'en avez pas vraiment besoin si vous voulez simplement enregistrer un bon tremblement.
Bien sûr, vous avez besoin de l'enregistrement standard et de l'enregistrement UN de cet auditeur dans le
Activity
.De plus, pour vérifier le seuil dont vous avez besoin, je recommande l' application suivante (je ne suis en aucun cas connecté à cette application)
la source
Voici un autre code pour cela:
la source
la source
la source
Shaker.java
MainActivity.java
S'amuser.
la source
la source
Vous devez vous abonner en tant que
SensorEventListener
, et obtenir lesaccelerometer
données. Une fois que vous l'avez, vous devez surveiller tout changement soudain de direction (signe) d'accélération sur un certain axe. Ce serait une bonne indication pour le'shake'
mouvement de l'appareil.la source
Travailler avec moi v.good Reference
la source
Vous voudrez peut-être essayer le minuscule bus open source . Avec elle, la détection des secousses est aussi simple que cela.
Il utilise la sismique pour la détection des secousses.
la source