Soy novato, no sé apenas nada de android, solo que muy muy básico, tenía que realizar un acelerómetro para un proyecto y me recoje muchos parámetros, es decir, quisiera coger parámetros cada 2 segundos por ejemplo, y ahi no sé ni como se hará. También que muestre un mensaje cuando cambien los valores, aquí tengo mi código que está mal pero al menos lo he intentado solucionar por mi mísmo por que sino, no aprendería.
Código:
Únicamente me recoge el valor de la variable Z incluso cuando es mayor que 6 me lo recoge!! Y no tendría que recoger nada excepto cuando fuera menor de 6...package org.aplicacion.acelerometro; import java.util.List; import android.app.Activity; import android.content.pm.ActivityInfo; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class Acelerometroemilio extends Activity implements SensorEventListener { private long last_update = 0, last_movement = 0; private float prevX = 0, prevY = 0, prevZ = 0; private float curX = 0, curY = 0, curZ = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @Override 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); } } @Override 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) { 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 movementX = Math.abs((curX) - (- prevX)) / time_difference; float movementY = Math.abs((curY) - (- prevY)) / time_difference; float movementZ = Math.abs((curZ) - (- prevZ)) / time_difference; int limit = 1500; float min_movement = 1E-6f; if (movementX > 4){ if (movementX > min_movement) { if (current_time - last_movement >= limit) { Toast.makeText(getApplicationContext(), "Hay movimiento de X", Toast.LENGTH_SHORT).show(); } last_movement = current_time; }} if (movementY > 2 ){ if (movementY > min_movement) { if (current_time - last_movement >= limit) { Toast.makeText(getApplicationContext(), "Hay movimiento de Y", Toast.LENGTH_SHORT).show(); } last_movement = current_time; }} if (movementZ < 6){ if (movementZ > min_movement) { if (current_time - last_movement >= limit) { Toast.makeText(getApplicationContext(), "Hay movimiento de Z", Toast.LENGTH_SHORT).show(); } last_movement = current_time; }} prevX = curX; prevY = curY; prevZ = curZ; last_update = current_time; } ((TextView) findViewById(R.id.txtAccX)).setText("Variable X: " + curX); ((TextView) findViewById(R.id.txtAccY)).setText("Variable Y: " + curY); ((TextView) findViewById(R.id.txtAccZ)).setText("Variable Z: " + curZ); } } }
Y si sabéis algún manual sencillo y bastante útil para aprender, también me interesa ^-^ a ser posible que no sea maestrosdelweb, gracias !!