Necesito agregar una función de sacudida que actualizará mi aplicación de Android.
Todo lo que encuentro de documentación implica la implementación de SensorListener
, pero Eclipse me dice que está en desuso y sugiere SensorEventListener
.
¿Alguien que tenga una buena guía sobre cómo hago para crear esto shake controller
?
android
accelerometer
shake
Sara
fuente
fuente
Respuestas:
Aquí hay un código de ejemplo. Pon esto en tu clase de actividad:
Y agregue esto a su método onCreate:
Luego, puede preguntar "mAccel" donde quiera en su aplicación para la aceleración actual, independiente del eje y limpiado de la aceleración estática como la gravedad. Será aprox. 0 si no hay movimiento, y digamos> 2 si el dispositivo se sacude.
Según los comentarios, para probar esto:
Notas:
El acelerómetro debe estar desactivado en Pausa y activado en Reanudar para ahorrar recursos (CPU, Batería). El código asume que estamos en el planeta Tierra ;-) e inicializa la aceleración a la gravedad terrestre. De lo contrario, obtendría un fuerte "temblor" cuando la aplicación se inicie y "golpee" el suelo por caída libre. Sin embargo, el código se acostumbra a la gravitación debido al filtro de corte bajo y funcionaría también en otros planetas o en el espacio libre, una vez que se inicializa. (nunca se sabe cuánto tiempo estará en uso su aplicación ... ;-)
fuente
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
supone que es esta línea de códigomAccel = 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) { ... }
nombres de los métodos deben ser correctos (no tengo el código conmigo ... )android.util.FloatMath.sqrt(x*x + y*y + z*z);
lugar de evitar una conversiónAquí está mi código para la detección de gestos de agitación:
Agregue esto a su actividad:
...
en onCreate () agregar:
y:
fuente
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
en onCreate (). De lo contrario, funciona de maravilla! ¡Gracias!Aquí hay otra implementación que se basa en algunos de los consejos aquí, así como en el código del sitio para desarrolladores de Android.
MainActivity.java
ShakeDetector.java
fuente
DoShake()
función?Realmente me gustó la respuesta de Peterdk. Me encargué de hacer un par de ajustes a su código.
archivo: ShakeDetector.java
Además, no olvide que necesita registrar una instancia de ShakeDetector con SensorManager.
fuente
SHAKE_THRESHOLD_GRAVITY
a 1.7F para evitar que los lectores piensen que esta respuesta no funciona porque tienen que sacudirse bastante debido a que el valor establecido es 2.7F .count
variable en onShake te dice cuántas veces se sacudió el dispositivoSystemClock.elapsedRealtime()
más queSystem.currentTimeMillis()
e inicializaría mShakeTimestamp con el mismo método en lugar de con 0Estoy desarrollando una aplicación de detección de movimiento y detección de movimiento para mi proyecto universitario.
Además del objetivo original de la aplicación, estoy dividiendo la parte de la biblioteca (responsable de la detección de movimiento y sacudidas) de la aplicación. El código es gratuito, disponible en SourceForge con el nombre del proyecto "BenderCatch". La documentación que estoy produciendo estará lista a mediados de septiembre. http://sf.net/projects/bendercatch
Utiliza una forma más precisa para detectar sacudidas: observa AMBAS diferencias de fuerza entre los eventos del sensor Y las oscilaciones presentes en los ejes X e Y cuando realiza una sacudida. Incluso puede hacer un sonido (o vibrar) en cada oscilación del batido.
No dude en preguntarme más por correo electrónico en raffaele [at] terzigno [dot] com
fuente
He escrito un pequeño ejemplo para detectar sacudidas verticales y horizontales y mostrar a
Toast
.fuente
Puedes usar sísmica . Un ejemplo se puede encontrar aquí .
fuente
He intentado varias implementaciones, pero me gustaría compartir la mía. Se utiliza
G-force
como unidad para el cálculo del umbral. Hace que sea un poco más fácil entender lo que está sucediendo, y también al establecer un buen umbral.Simplemente registra un aumento en la fuerza G y activa al oyente si excede el umbral. No utiliza ningún umbral de dirección, porque realmente no lo necesita si solo desea registrar un buen batido.
Por supuesto, necesita el registro estándar y el registro UN de este oyente en el
Activity
.Además, para verificar qué umbral necesita, le recomiendo la siguiente aplicación (no estoy conectado de ninguna manera a esa aplicación)
fuente
Aquí hay otro código para esto:
fuente
fuente
fuente
Shaker.java
MainActivity.java
Que te diviertas.
fuente
fuente
Debe suscribirse como a
SensorEventListener
y obtener losaccelerometer
datos. Una vez que lo tenga, debe controlar el cambio repentino en la dirección (signo) de la aceleración en un determinado eje. Sería una buena indicación para el'shake'
movimiento del dispositivo.fuente
Trabajando conmigo v.buena referencia
fuente
Es posible que desee probar tinybus de código abierto . Con esto, la detección de sacudidas es tan fácil como esto.
Utiliza sísmica para la detección de sacudidas.
fuente