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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CURSO ANDROID<br />

77<br />

valores anteriores <strong>de</strong> X, Y y Z tiene valores diferentes <strong>de</strong> cero. Esto <strong>de</strong>bería ejecutarse sólo la primera<br />

vez.<br />

if (prevX == 0 && prevY == 0 && prevZ == 0) {<br />

last_update = current_time;<br />

last_movement = current_time;<br />

prevX = curX;<br />

prevY = curY;<br />

prevZ = curZ;<br />

}<br />

Obtenemos la diferencia entre la última actualización y el timestamp actual, esto nos servirá no solo<br />

para ver que si existe una diferencia <strong>de</strong> tiempos en las mediciones si no también para calcular el movimiento.<br />

Para ello, tomamos la posición actual (con las 3 coor<strong>de</strong>nadas) y la restamos a la posición anterior,<br />

pue<strong>de</strong> ser que el movimiento sea en distintas direcciones por eso nos es útil el valor absoluto.<br />

long time_difference = current_time - last_update;<br />

if (time_difference > 0) {<br />

float movement = Math.abs((curX + curY + curZ) - (prevX - prevY - prevZ)) /<br />

time_difference;<br />

...<br />

}<br />

Para <strong>de</strong>cidir en que momento mostramos un aviso Toast indicando el movimiento vamos a usar como<br />

valor <strong>de</strong> frontera <strong>de</strong> movimiento mínimo 1×10^-6; este valor es arbitrario mientras mayor sea, se necesitará<br />

más movimiento y mientras menor sea más sensible será el display <strong>de</strong>l aviso.<br />

Manejamos también 2 variables para el control <strong>de</strong> tiempo, una para saber la última actualización (last_<br />

update) y otra para conocer la última vez que se registró movimiento last_movement y en esta parte <strong>de</strong>l<br />

código actualizamos su valor según sea conveniente.<br />

int limit = 1500;<br />

float min_movement = 1E-6f;<br />

if (movement > min_movement) {<br />

if (current_time - last_movement >= limit) {<br />

Toast.makeText(getApplicationContext(), “Hay movimiento <strong>de</strong> “ + movement,

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

Saved successfully!

Ooh no, something went wrong!