Acelerómetro SensorEvent timestamp

Im que trabaja actualmente en una aplicación androide. Tengo que registrar la coordinación del acontecimiento del sensor del acelerómetro con tiempo del acontecimiento. Conseguí el timestamp del acontecimiento del sensor como "3497855005850" pero no puedo convertir el timestamp del acontecimiento en formato legible de la hora de la fecha del usuario. Gracias de antemano

¿Cómo puedo convertir la marca de tiempo de SensorEvent a la marca de tiempo unix?

La marca de tiempo del sensor es en realidad nanosegundos de tiempo de actividad, no el tiempo del sistema en nanosegundos. Véase SensorEvent.timestamp to absolute (utc) timestamp? .

En teoría, puede convertir la marca de tiempo del sensor en el tiempo en milisegundos utilizando:

long timeInMillis = (new Date()).getTime() + (sensorEvent.timestamp - System.nanoTime()) / 1000000L; 

Usted podría incluso System.nanoTime() llamada (new Date()).getTime() con dos llamadas de System.nanoTime() y media ellos para conseguir más cercano a la compensación real.

A continuación, puede formatear el tiempo del sensor como fecha y hora.

Puede establecer variables de tiempo de referencia en su función onSensorChanged(SensorEvent) .

Referencia para la hora actual y la hora del evento. Cuando llegue el evento sustraiga el tiempo de referencia del sensor del tiempo del evento y tendrá una diferencia en nanosegundos. Puede agregar esa diferencia dividida por 1.000.000 a la referencia de tiempo actual para obtener el tiempo del evento en milisegundos.
Error al calcular esto puede ser de 0,5 milisegundos como máximo para un evento. Puede minimizar el error cambiando ocasionalmente los tiempos de referencia.

 private long sensorTimeReference = 0l; private long myTimeReference = 0l; public void onSensorChanged(SensorEvent event) { // set reference times if(sensorTimeReference == 0l && myTimeReference == 0l) { sensorTimeReference = event.timestamp; myTimeReference = System.currentTimeMillis(); } // set event timestamp to current time in milliseconds event.timestamp = myTimeReference + Math.round((event.timestamp - sensorTimeReference) / 1000000.0); // some code... } 

Tuve el mismo problema y usé la solución de ehartwell. Sin embargo, utilicé System.currentTimeMillis() lugar de new Date().getTime() .

Además he encontrado que hay un desplazamiento de sensorEvent.timeStamp y System.nanoTime() de 300 ms máximo, sobre todo <200 ms. Dependiendo de la precisión necesaria puede ignorar esta diferencia.

Si utilizo solución Boban S., la diferencia es correcta en la inicialización. Sin embargo, el tiempo correcto y el tiempo de las mediciones divergen. El tiempo estimado de las mediciones es en el futuro.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.