Utilizar getRotationMatrix y getOrientation en Android 2.1

He estado teniendo problemas con esto por mucho tiempo. Este código debería producir dx, dy, dz para el acelerómetro, y un total de ejecución de la dx. También debe producir azimut, tono y rollo.

He utilizado la información dada aquí , pero en vano.

Este código no genera correctamente el tono, azimut o rollo. Produce 0.0, -0.0, -0.0 para las últimas tres vistas de texto, respectivamente.

switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: accelerometerValues = event.values.clone(); case Sensor.TYPE_MAGNETIC_FIELD: geomagneticMatrix = event.values.clone(); sensorReady = true; break; default: break; } if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) { sensorReady = false; float[] R = new float[16]; float[] I = new float[16]; SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix); float[] actual_orientation = new float[3]; SensorManager.getOrientation(R, actual_orientation); tvXCoordinate.setText(accelerometerValues[0] + ""); tvYCoordinate.setText(accelerometerValues[1] + ""); tvZCoordinate.setText(accelerometerValues[2] + ""); floatXTotal += accelerometerValues[0]; tvXTotal.setText(floatXTotal + ""); tvAzimuth.setText(actual_orientation[0] + ""); tvPitch.setText(actual_orientation[1] + ""); tvRoll.setText(actual_orientation[2] + ""); } 

Puedo estar perdiendo algo (y usted puede haber resuelto esto ya), pero a mí parece que su declaración de switch es incorrecta:

 switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: accelerometerValues = event.values.clone(); case Sensor.TYPE_MAGNETIC_FIELD: geomagneticMatrix = event.values.clone(); sensorReady = true; break; default: break; } 

Si su evento de sensor es TYPE_ACCELEROMETER los valores del evento serán clonados tanto en accelerometerValues como en geomagneticMatrix y sensorReady se establecerá en true. Creo que es posible que necesite cambiar el orden de este bloque o, posiblemente, añadir un break; Después de su primer caso.

La razón por la que obtiene 0.0, -0.0, -0.0 de getOrientation () es que getRotationMatrix () no siempre obtiene un resultado válido. Debe comprobar el valor devuelto de getRotationMatrix (), que será falso si el resultado no es válido, o true si se logra.

Añadido: En realidad, eso no salió bien. Usted está recibiendo un resultado no válido por la razón aganders señaló. Comprobar el valor devuelto simplemente sería una indicación de que de hecho obtuvo un resultado no válido.

  • Protocolo de comunicación fiable y ligero para móviles
  • ¿Cómo voy a detectar el sensor de movimiento en el receptor de radiodifusión?
  • Cómo usar los datos del sensor onSensorChanged en combinación con OpenGL
  • Valor de retorno falso inesperado de android.hardware.SensorManager.registerListener en Android 4.3
  • ¿Qué hace SampleRate.MS16, MS32, MS128 stand para cuando está asociado con oyentes de sensor?
  • ¿Cómo rastrear la posición de un dispositivo Android en un edificio?
  • Cómo saber si mi SensorManager tiene un Sensor registrado
  • No es posible obtener los valores del sensor de proximidad en android
  • Cómo utilizar SensorManager.getOrientation () en lugar de TYPE_ORIENTATION
  • Android - Cómo acercarse al algoritmo de detección de caídas
  • Android: Problemas al calcular la orientación del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.