jueves, 23 de febrero de 2012

Acelerometro en Android



Intro
Para esta entrada veremos un pequeño tutorial que nos mostrara las coordenadas de nuestro acelerometro.
La mayoria de los smartphones que son android, llevan esta tecnologia y muchas veces son empleados en los juegos, como por ejemplo uno de sniper, que con mover el dispositivo la mira va cambiando, carreras, aviacion, entre otros. Empleandolo en el hardware, podria ser mover un objeto, para que este efectuara algo, como mover la direccion de un carrito.

Teoria
Hay que considerar como android toma la orientacion de nuestro smarphone, pero para no dar tanta teoria, encontre una imagen que ayuda en mucho



Desarrollo
Para esta aplicacion se utilizaron las siguientes librerias, en las cuales mandamos llamar al acelerometro y algunos parametros que ocupamos:

hardware.Sensor;
hardware.SensorEvent;
hardware.SensorEventListener;
hardware.SensorManager; 

Codigo:
acelerometro.java: 
package ab.acelerometro.namespace;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class AcelerometroActivity extends Activity implements SensorEventListener {
 private SensorManager sensorManager;

 TextView Dirx; // declaramos objetos de x, y, z
 TextView Diry; 
 TextView Dirz; 

 @Override
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  Dirx=(TextView)findViewById(R.id.Coorx); // Declaramos la id de x, y, z
  Diry=(TextView)findViewById(R.id.Coory); 
  Dirz=(TextView)findViewById(R.id.Coorz); 

  sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
  // Agregamos el listener, de sensor en esta clase
  sensorManager.registerListener(this,
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), //APIS declaradas del tipo de sensor
    SensorManager.SENSOR_DELAY_NORMAL); //El tiempo de espera
  //Se pueden agregar otras APIS
  
 }

 public void onSensorChanged(SensorEvent event){

  // vemos el tipo de sensor
  if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

   float x=event.values[0];//Asignamos las direccioneds en x, y, z
   float y=event.values[1];
   float z=event.values[2];

   Dirx.setText("X: "+x); //Mostramos los valores que arroja x, y, z
   Diry.setText("Y: "+y);
   Dirxz.setText("Z: "+z);
  }
 }
}

main.xml


    
    
         


Nota:
Hay que tomar en cuenta varios aspectos importantes, que si se nos pasan por alto, el programa no funcionara y son:
Agregar implements en la clase
public class AcelerometroActivity extends Activity implements SensorEventListener

Agregar el permiso de Internet en el androidmanifest.xml (Puede sonar raro, ya que empleamos el acelerometro, pero tras varios intentos sin esto, no funciona):
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />

Resultado:
Si quieren probar la aplicacion, la pueden descargar de este link
Bibliografia:
http://javiercancela.com/2009/07/20/desarrollo-en-android-acelermetro-magnetmetro-y-sensores-de-orientacin-y-temperatura-en-el-htc-magic/
http://awesomebytes.com/2010/07/31/usando-el-acelerometro-en-android/

1 comentario: