Ver Mensaje Individual
  #4  
Viejo 11/08/12, 16:13:38
Array

[xs_avatar]
Arasthel Arasthel no está en línea
Cocinero veterano
· Votos compra/venta: (1)
 
Fecha de registro: jun 2009
Localización: Almería
Mensajes: 1,946
Modelo de smartphone: Nexus 5
Tu operador: Amena
¿No sería mejor coger el módulo de la aceleración, o en su defecto, tener en cuenta solo el valor Y? Te pongo el código que usa mi app por si te sirviese de ayuda:

Código:
private SensorEventListener accelerometerListener = new SensorEventListener() {
		
		@Override
		public void onSensorChanged(SensorEvent event) {
			if(event.timestamp - lastUpdate >= 2000){
				double modulo = Math.sqrt(Math.pow(event.values[0],2)+Math.pow(event.values[1],2)+Math.pow(event.values[2],2));
				modulo -= 9.80665;
				if(modulo >= aceleracion){
					lastUpdate = event.timestamp;
					Intent i = new Intent();
					i.setClass(getApplicationContext(), LocAccelReceiver.class);
					i.putExtra("modulo", modulo);
					i.putExtra("dir", mDir);
					i.putExtra("geo", mGeo[0]+","+mGeo[1]);
					i.setAction("org.pmz.crashdroid.CHOQUE");
					sendBroadcast(i);
				}
			}
		}
		
		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			// TODO Auto-generated method stub
		}
	};
En mi caso no compruebo con valores anteriores, sino que busco picos puntuales mayores que "aceleracion", que es un valor relativamente grande. De todas formas, sería mucho más fácil entender tu código si estuviese indentado, así es bastante irritante tener que ir pensando dentro de qué bloque de código estás. Además, el método que usas para calcular "movement" me resulta muy raro.

Para empezar, si quieres restar uno a otro, ¿no sería así? (a+b+c)-(a'+b'+c'). Además, supongamos que los valores antiguos eran:

x=-3
y=-9.8
z= 0

Y los nuevos:

x=0
y=-9.8
z=-3

Según el método que usas, el movimiento del dispositivo no habría cambiado (-3-9.8+0) = (-9.8-3+0), pero realmente el cambio es bastante importante. Si quieres hacerlo así, lo mejor sería calcular la diferencia en cada coordenada. Además, un giro del dispositivo (apaisado a vertical, por ejemplo) se podría considerar una caída al cambiar las coordenadas de valor de forma rápida, así que quizás sería mejor que te guiases por el módulo.

Que conste que digo esto después de varios años sin dar física y fuerzas y aceleraciones, así que puedo estar metiendo la pata hasta el fondo. Sin embargo, el código que te he puesto de mi aplicación funciona sin problemas en varios dispositivos con distintas versiones de Android, comprobado.

Un saludo.
Responder Con Cita
Gracias de parte de: