Foros del Web » Programando para Internet » Android »

acelerometro

Estas en el tema de acelerometro en el foro de Android en Foros del Web. Hola buenas a todos, quería saber cómo realizar algún método para aumentar el tiempo de recogida de valores del acelerómetro. Explico. Soy novato, no sé ...
  #1 (permalink)  
Antiguo 06/06/2012, 05:39
 
Fecha de Ingreso: mayo-2012
Ubicación: En mi casa xD
Mensajes: 24
Antigüedad: 12 años, 6 meses
Puntos: 0
acelerometro

Hola buenas a todos, quería saber cómo realizar algún método para aumentar el tiempo de recogida de valores del acelerómetro. Explico.
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:
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);
        
        }
	}
}
Ú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...
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 !!

Etiquetas: java, todo, apps, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:35.