Constante de fecha y hora de Android SensorEvent
Actualmente estoy escribiendo una simple aplicación Android para calcular los sesgos de los dispositivos imu. Al hacer esto me he encontrado con un problema con el valor de event.timestamp
Usando el código:
- Convertir timestamp en fecha actual en android
- ¿Cómo obtengo las siguientes marcas de tiempo exactas hasta 5 micro segundos en android
- ¿Cómo usar la marca de hora del servidor Firebase para generar la fecha creada?
- Error de VideoView getCurrentPosition () en Acer Iconia A200
- Java calcular el tiempo entre dos timestamps
float dT = (event.timestamp-accel_timestamp)*NS2S;
Del ejemplo de la Guía de referencia de Android para calcular la matriz de rotación a partir del cuaternión.
Cuando ejecuto el código usando un Galaxy Nexus-S obtengo un dT de 0.06 ~ 0.07 seg entre mediciones pero cuando ejecuto el mismo código en un Nexus 4 de LG o Nexus 7 el dT es siempre 0. Estoy enterado de la pregunta , El problema de timestamp Android SensorEvent que la marca de tiempo Nexus 7 es un estampado de tiempo unix, pero la diferencia entre mediciones sucesivas no siempre debe ser cero. El Nexus 4 y Nexus 7 tienen la misma IMU podría ser un error en la forma en que se crea la marca de tiempo de la IMU?
- Obtener una marca de tiempo larga del selector de fechas onDateSet
- Para obtener la fecha y la hora de Timestamp Android
- Fecha y hora de la fecha
- ¿Android consigue el timestamp actual?
- ¿String timestamp a Calendario en Java?
- Convertir cadena al formato de sello de tiempo de MySQL en php
- La fecha y hora muestran datos erróneos
- Conversión de la marca de hora como cadena a la fecha en android
Wow, ok este es sin duda un error!
La marca de tiempo de cada SensorEvent se sobrescribe como si fuera una variable estática …
Cuando grabo una cadena de la marca de tiempo cuando se produce el evento, todos los valores son diferentes.
Los eventos se almacenan en una matriz sin cambios.
Cada SensorEvent en la matriz ahora tiene la misma marca de tiempo, pero los arrays de valores siguen siendo diferentes (es decir, no son el mismo objeto y contienen información diferente … EXCEPTO para la marca de tiempo).
Google / HTC, por favor regrese 3 horas de mi vida!
Voy a presentar un informe de error, a menos que alguien pueda explicar este comportamiento. Ciertamente no está documentado en la API .
Mientras tanto, pruebe esta solución :
import android.hardware.Sensor; import android.hardware.SensorEvent; public class UnbrokenSensorEvent { public long timestamp; public float[] values; public Sensor sensor; public UnbrokenSensorEvent(SensorEvent event){ this.timestamp = event.timestamp; this.values = event.values; this.sensor = event.sensor; } }
Luego haz algo como esto en tu oyente:
ArrayList<UnbrokenSensorEvent> results = new ArrayList<UnbrokenSensorEvent>(); public void onSensorChanged(SensorEvent event) { results.add(new UnbrokenSensorEvent(event)); }
La refactorización debe ser bastante fácil, ya que SensorEvent y UnbrokenSensorEvent tienen los mismos campos públicos. Si necesita usar otra funcionalidad de SensorEvent, simplemente vaya adelante y colóquela en la versión Ininterrumpida.
Es hacky, pero IMHO un rápido hack es siempre mejor que esperar a que una API se actualice!
También tenga en cuenta la documentación sobre SensorEventListener's onSensorChanged -method:
NOTA: La aplicación no posee el objeto de evento pasado como un parámetro y, por lo tanto, no puede retenerlo. El objeto puede ser parte de un grupo interno y puede ser reutilizado por el marco.
Encontrado aquí: http://developer.android.com/reference/android/hardware/SensorEventListener.html#onSensorChanged%28android.hardware.SensorEvent%29
… lo que sugiere que uno no debe tener referencias a objetos SensorEvent.
Si ha copiado un fragmento de aquí , tenga en cuenta que tiene un error. Necesita reemplazar
private float timestamp;
a
private long timestamp;
En otro caso su tiempo delta siempre contendrá un valor extraño
- Máximo agarre de la cámara y rendimiento de la pantalla
- Comprueba si la aplicación web se agrega a la pantalla de inicio en Android