21.04.2014 Views

Curso-Android-Desarrollo-de-Aplicaciones-Móviles

Curso-Android-Desarrollo-de-Aplicaciones-Móviles

Curso-Android-Desarrollo-de-Aplicaciones-Móviles

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CURSO ANDROID<br />

76<br />

Agregando código<br />

La clase <strong>de</strong> la Activity principal para nuestra aplicación implementará SensorEventListener para el<br />

manejo <strong>de</strong> las actualizaciones <strong>de</strong> los sensores, en nuestro caso específico nos interesa el acelerómetro.<br />

public class Main extends Activity implements SensorEventListener<br />

Utilizaremos algunas variables <strong>de</strong> instancia para el control <strong>de</strong> los valores <strong>de</strong> los 3 ejes que mi<strong>de</strong> el acelerómetro<br />

(valor anterior y valor actual) y otras para guardar el timestamp <strong>de</strong> la última actualización y la<br />

última vez que se <strong>de</strong>tectó movimiento.<br />

private long last_update = 0, last_movement = 0;<br />

private float prevX = 0, prevY = 0, prevZ = 0;<br />

private float curX = 0, curY = 0, curZ = 0;<br />

Al implementar esta interface <strong>de</strong>bemos sobrecargar dos métodos:<br />

@Overri<strong>de</strong><br />

public void onAccuracyChanged(Sensor sensor, int accuracy) {}<br />

@Overri<strong>de</strong><br />

public void onSensorChanged(SensorEvent event) {}<br />

Vamos a trabajar sobre onSensorChanged nuestro código será un synchronized statement (más información<br />

en la documentación <strong>de</strong> Java 1 ) para evitar problemas <strong>de</strong> concurrencia al estar trabajando con<br />

los sensores.<br />

synchronized (this) {<br />

}<br />

A partir <strong>de</strong>l evento recibido como parámetro vamos a obtener el timestamp <strong>de</strong> la fecha/hora actual (se<br />

usará más a<strong>de</strong>lante) y los valores para los 3 ejes <strong>de</strong>l acelerómetro (X, Y, Z).<br />

long current_time = event.timestamp;<br />

curX = event.values[0];<br />

curY = event.values[1];<br />

curZ = event.values[2];<br />

Luego, revisamos si este código ya se ha ejecutado alguna vez, es <strong>de</strong>cir, si las variables que guardan los<br />

1 http://download.oracle.com/javase/tutorial/essential/concurrency/locksync.html

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!