viernes, 5 de octubre de 2012

Tutorial Android: Acelerómetro, accelerometer (Sensor)

Buenos días,
Hoy vamos a ver como utilizar y captar las coordenadas de movimiento del móvil obtenidas através del sensor de movimiento llamado acelerómetro en inglés accelerometer. Las coordenadas obtenídas serán la X, Y y Z.
Las pruebas las vamos hacer con el movil en horizontal y boca arriba. En esa posición las coordenadas obtenidas són las siguientes:







                Inicial:                                                                Levantamos el móvil verticalmente:  
              X: -0,20                                                                               X: 0,00                                              
              Y:  0,20                                                                                Y: 9,00
              Z:  10,0                                                                                Z: 0,00

Incliamos el movil horizontalmente:                                        Incliamos el movil verticalmente:

              X: -9 / 9                                                                                 X: 0,00                                              
              Y:  0,20                                                                                  Y: -9 / 9
              Z:  10,0                                                                                  Z: 0,00

Log obtenido mientras movemos el móvil:

Ahora os muestro el código totalmente comentado para que entendáis fácilmente el funcionamiento, esta aplicación lo único que hace es captar el sensor y imprimir los resultados en el LogCat:
public class TestAcelerometerActivity extends Activity 
 implements SensorEventListener{
    //Declaramos el SensorManager es la clase que controla el sensor.
 private SensorManager sensorManager; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //Captamos el servicio
        sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
        //Lo activamos dandole las características standars.
        sensorManager.registerListener(this, 
         sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
         , SensorManager.SENSOR_DELAY_NORMAL);
    }
 @Override
 //Función llamada cada vez que el sensor capta un mínimo cambio.
 public void onSensorChanged(SensorEvent event) {
    //Filtramos solo el sensor acelerómetro,
    //Si cambiamos el filtro podríamos obtener otros sensores
    //como or ejemplo tocar la pantalla.
    if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ 
     //Vamos imprimiendo los resultados en el Log:
     //Aquí irá vuestro código personal.
     Log.d("Coordenada X: ",event.values[0]+"");
     Log.d("Coordenada Y: ",event.values[1]+"");
     Log.d("Coordenada Z: ",event.values[2]+"");
     Log.d("############# ","######################");
      }
 }
 @Override
 public void onAccuracyChanged(Sensor sensor, int accuracy) {}
}

Añado Link de descarga del proyecto:

Espero que os haya sido de ayuda! Y preguntar cualquier duda y entre todos intentaremos resolverlas.

Muchas gracias a todos y no olvidéis de comentar!!!

10 comentarios:

  1. solo es el movil no mueves otro objeto...

    ResponderEliminar
    Respuestas
    1. Solo explica el sensor, ahora abría que buscar como dar las coordenadas a un objeto como por ejemplo una imagen y ir multiplicándolo por los resultados del sensor para conseguir el efecto de movimiento. Gracias!

      Eliminar
  2. como se le puede aplicar a una imagen y que se genere el efecto de movimiento

    ResponderEliminar
  3. Buen día, estoy trabajando en un proyecto que usa intensamente el acelerómetro, quisiera saber si se puede capturar con este método "un patrón de movimiento". Gracias

    ResponderEliminar
    Respuestas
    1. Buenos días!
      Sí que se puede ya que en este tutoríal lo que explica és la base del acelerómetro. En tu caso en vez de usar Log.d() que uso en el ejemplo tu deberías introducir hay tu código que fuera guardando movimientos para el patrón.
      Muchas gracias!

      Eliminar
  4. Buenos días (tarde/noche). Victor, intente probar esto del acelerómetro pero me marca error en la línea "implementes SensorEventListener" ¿esto a que se debe?. Y bueno si puedes colocar un link para descargar el proyecto en eclipse también te lo agradecería.

    ResponderEliminar
    Respuestas
    1. He añadido el proyecto en un link para descargar.

      Gracias por tu comentario

      Eliminar
  5. :'( Esque lo descargo y Nada que me da Ayudame :(

    ResponderEliminar
    Respuestas
    1. Deberías empezar por tutoriales más simples como este: http://www.tutorialeshtml5.com/2012/02/tutorial-basico-android-agregar-boton.html

      Eliminar
  6. hola
    ncesito saber como puedo gurdar esos datos en la base de android sqlite

    ResponderEliminar