y así que necesitaba saber cuándo el teléfono basado en Android giró las direcciones x, y, z para un programa basado en inclinación y luego usé el código bien circulado que usa magnetismo y aceleración para encontrar orientación ya que el detector de orientación no es confiable y esto era bueno en los planos x, z pero digamos que una persona estaba en un autobús moviendo circularmente sus teléfonos en una posición de paisaje fijo y luego el androide registra movimiento de dirección y a pesar de que el usuario no movieron sus teléfonos en la dirección y, por lo que el programa falla, pero el solo uso de la aceleración sola tampoco es precisa y me pregunto cómo resolver este problema de detección de y- movimiento en relación con el usuario.Teoría de detección de orientación de Android
public class MotionListener {
String service_name = Context.SENSOR_SERVICE;
SensorManager sensorManager;
Sensor sensor;
public MotionListener(Context context) {
sensorManager = (SensorManager) context.getSystemService(service_name);
SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
Sensor aSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor mfSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sm.registerListener(myAccelerometerListener, aSensor, SensorManager.SENSOR_DELAY_GAME);
sm.registerListener(myMagneticFieldListener, mfSensor, SensorManager.SENSOR_DELAY_GAME);
}
float[] accelerometerValues;
float[] magneticFieldValues;
final SensorEventListener myAccelerometerListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
accelerometerValues = sensorEvent.values;
float[] values = new float[3];
float[] R = new float[9];
try {
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues);
SensorManager.getOrientation(R, values);
values[0] = (float) ((float) values[0] * 180/Math.PI);
values[1] = (float) ((float) values[1] * 180/Math.PI);
values[2] = (float) ((float) values[2] * 180/Math.PI);
System.out.println((int)values[0] + " " + (int)values[1] + " " + (int)values[2]);
setTiltCoordinates(values);
} catch (NullPointerException e) {
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
no es posible - sin indicar la orientación del usuario al dispositivo - que es una pregunta completamente diferente – KevinDTimm
No. No puedo hacerlo [Marcos de referencia] (http://en.wikipedia.org/wiki/Frame_of_reference), etc. Como usuario, intentar usar una aplicación de este tipo en esas condiciones es un ejercicio inútil, de todos modos. – Cheezmeister
+1 Estoy buscando el mismo – Sameer