Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 10/08/12, 20:08:29
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
Aplicacion deteccion de caidas

Hola, estoy desarrollando una aplicación que detecta caídas por el acelerometro, lo he desarrollado con un móvil que tiene android 2.2 y ahora al ponerlo en android 4.0.3 en otro móvil no funciona correctamente, de hecho incluso cuando tengo el móvil encima de la mesa sin hacer nada con él detecta una caída y no tengo ni idea por qué me da ahora ese problema. A ver si alguien tiene alguna idea.

Gracias.
Responder Con Cita


  #2  
Viejo 10/08/12, 20:45:37
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
Si no pones ni siquiera en planteamiento del algoritmo de las caídas, y absolutamente nada de código, pues la cosa está difícil. Yo para una app que usaba el acelerómetro siempre tenía que restarle la gravedad a los valores que me daba para tener un valor más conveniente. No sé si en tu caso es interesante o necesario hacer eso, la verdad. De todas formas, mi app que es parecida parece funcionar sin problemas en varias versiones y móviles, así que me resulta difícil decirte nada...

Un saludo.
Responder Con Cita
  #3  
Viejo 11/08/12, 13:33:09
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
Código

Este es el código que funciona perfectamente en el android 2.2.


//Sensor de caida



protected void onResume() {
super.onResume();

SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
if (sensors.size() > 0) {
sm.registerListener(this, sensors.get(0), SensorManager.SENSOR_DELAY_GAME);
}

}

protected void onStop() {

SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
sm.unregisterListener(this);
super.onStop();

}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}

@Override
public void onSensorChanged(SensorEvent event) {
if(Caidasid.equals("On") && x==0)
{
synchronized (this) {
long current_time = event.timestamp;
curX = event.values[0];
curY = event.values[1];
curZ = event.values[2];
if (prevX == 0 && prevY == 0 && prevZ == 0) {
last_update = current_time;
last_movement = current_time;
prevX = curX;
prevY = curY;
prevZ = curZ;
}
long time_difference = current_time - last_update;
if (time_difference > 0) {
float movement = Math.abs((curX + curY + curZ) - (prevX - prevY - prevZ)) / time_difference;
int limit = 1500;
float min_movement = (valorCaida);
if (movement > min_movement) {
if (current_time - last_movement >= limit) {

vibrator.vibrate(3000);

Toast.makeText(getApplicationContext(),"Se ha enviado un sms de ayuda" , Toast.LENGTH_SHORT).show();
}



}
last_movement = current_time;
}
prevX = curX;
prevY = curY;
prevZ = curZ;
last_update = current_time;
}

}
}
}

Bueno el valorCaida es un valor que elijo yo primero en la configuración y para el caso del android 4.0.3 LG Optimus L5 me va relativamente bien con el valor 0.00000375 (con el android 2.2 me va bien con el valor0.0000009) pero aunque al principio va bien pero luego se activa el solo y si esta el wifi desactivado y lo activo tb lo asocia como una caída.

Muchas gracias por la ayuda.
Responder Con Cita
  #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:
  #5  
Viejo 11/08/12, 23:42:36
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
Muchas gracias, lo miraré mañana, lo pruebo y comento a ver como va.

La verdad es que tienes razón en cuanto a lo de la resta, igual por eso falla, no me había fijado bien, y tb en cuanto a lo de identar el código, lo haré de ahora en adelante, gracias. Para impedir que me detecte como caída un giro de pantalla añadí al código para que no se girase la pantalla, no lo puse ahí para no incluir demasiado código.
Responder Con Cita
  #6  
Viejo 12/08/12, 13:13:31
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
Arce13

Al final, con lo de cambiar la resta que habías mencionado ya funciona perfectamente, así que muchas gracias, me voy a quedar con mí código que me parece más fácil de explicar y de aceleración no tengo ni idea xd. Espero que al finalizar la caída no acabe con el mismo valor con el que empezó variando las coordenadas, como señalaste, pq ahí sí que no funcionaría. Una pregunta,¿¿ de dónde sacaste esos conocimientos de android??, por un curso o leyendo algo, pq si tienes algún libro que recomendarme o algún curso por el estilo, ahora que creo que he dejado de ser "novato" respecto a esto, me gustaría seguir avanzando.
Responder Con Cita
  #7  
Viejo 12/08/12, 14:30:36
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
Realmente he aprendido todo esto a base de tutoriales y prueba y error. De todas formas en esta página tiene un curso de programación de Android que toca muchísimos temas y es realmente útil. Yo he hecho la donación porque me parece una currada impresionante y además nunca está de más tener el curso en pdf.

Un saludo.
Responder Con Cita
  #8  
Viejo 12/08/12, 15:42:31
Array

[xs_avatar]
Arce13 Arce13 no está en línea
Miembro del foro
 
Fecha de registro: jul 2012
Mensajes: 30
Modelo de smartphone: LG Optimus L5
Tu operador: Orange
Justo el que he seguido yo, tb tengo pensado hacer la donación que la verdad lo merece.
Responder Con Cita
  #9  
Viejo 28/11/13, 15:45:47
Array

[xs_avatar]
fernando.777a fernando.777a no está en línea
Usuario novato en la web
 
Fecha de registro: nov 2013
Mensajes: 2
Modelo de smartphone: galaxy s III mini
Tu operador: Movistar
una consulta tengo el mismo problema de Arce13 y quisiera que me ayuden por favor debo hacer una aplicacion que pueda contar las caidas de un celular y registrarlo en una base de datos simple que detalle la fecha y la hora de la caida
no entiendo muy bien los codigos que publicaron anteriormente por que algunas variables no estan declaradas o no las publicaron completas
muchas gracias de antemano por su ayuda
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 18:48:26 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /