studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android rotation android-sensors android-5.1.1-lollipop

programacion - El sensor de Vector de Rotación Android 5 no es preciso



manual de programacion android pdf (0)

He encontrado un problema con el sensor de rotación, el que TYPE_ROTATION_VECTOR tipo TYPE_ROTATION_VECTOR . La lectura del sensor parece no ser precisa, o algo le molesta, es difícil de decir. Este es el código que estoy usando para adquirir la rotación real del dispositivo:

public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) { if (prevRotMatrix == null) { prevRotMatrix = new float[16]; SensorManager.getRotationMatrixFromVector(prevRotMatrix, event.values); } else { float[] deltas = new float[3]; SensorManager.getRotationMatrixFromVector(rotMatrix, event.values); SensorManager.getAngleChange(deltas, rotMatrix, prevRotMatrix); rotXVal += (float) Math.toDegrees(deltas[1]); rotYVal += (float) Math.toDegrees(deltas[2]); rotZVal += (float) Math.toDegrees(deltas[0]); client.rotX(rotXVal); client.rotY(rotYVal); client.rotZ(rotZVal); System.arraycopy(rotMatrix, 0, prevRotMatrix, 0, rotMatrix.length); } } }

rotXVal , rotYVal y rotZVal son todos cero al comienzo.
El problema es que los valores que obtengo se alteran de alguna manera. El movimiento de dispositivos generalmente es visualizado por ellos, pero muy a menudo aparecen algunos valores inválidos. A menudo, cuando giro el dispositivo en una dirección, la lectura muestra la rotación válida, pero después de eso hay un "feedback" no válido en la dirección opuesta, generalmente más pequeño que el movimiento correcto.
Lo importante es que la situación solo me sucede en el dispositivo Android Lollipop (Samsung Galaxy S6). Estaba probando esto también en KitKat (Samsung Galaxy Note 4) y el mismo código funcionó bien.
Noté el mismo comportamiento al ejecutar este RotationVectorDemo . El mismo tipo de distorsión en Lollipop, pero funciona bien en KitKat.

Me pregunto si alguien podría ayudarme a encontrar la manera de resolver el problema. ¿O tal vez debería dejarlo y utilizar algún otro sensor?