2011-10-14 16 views
5

Estoy leyendo los valores de marca de tiempo de los datos de SensorEvent pero no puedo calcular el tiempo de referencia para estos valores. documentación de Android sólo dice "El tiempo en nanosegundos en la que ocurrió el evento" A modo de ejemplo:Android Sensor Timestamp tiempo de referencia

Mi fecha actual dispositivo Android, 14 de octubre 2011 23: 29: 56.421 (GMT + 2)

System.currentTimeMillis * 1000000 (nanosec) = 1318627796431000000 (está bien)

sensorevent.timestamp (nanosec) = 67578436328000 = 19 horas 46 min ????

¿Me puede ayudar?

gracias

+0

Vea aquí: http://stackoverflow.com/questions/3498006/sensorevent-timestamp-to-absolute-utc-timestamp – goto10

Respuesta

3

Parece ser que lo que se está tratando es el número de nanosegundos desde que se inició el sistema operativo, también conocido como "tiempo de actividad".

Más información sobre el tema: http://code.google.com/p/android/issues/detail?id=7981

debo añadir que la cuestión vinculada SensorEvent.timestamp to absolute (utc) timestamp? trata de la misma cuestión y es donde he encontrado la respuesta.

+1

Gracias goto10 y manu3d, finalmente la respuesta es que el tiempo de la marca de tiempo es el tiempo de actividad del dispositivo en nanosecs. –

+2

No siempre es así. En mi Nexus 4, es nanosegundos desde la época (inicio de 1970). Quizás podría inferirse suponiendo que el SensorEvent va a procesarse rápidamente y probándolo contra el tiempo de actividad y el inicio de 1970. – davtom

1

Sé que es una pregunta muy antigua, pero también estoy luchando por convertir SensorEvent.timestamp en un tiempo legible para los humanos. Así que escribo aquí lo que he entendido hasta ahora y cómo lo estoy convirtiendo para obtener mejores soluciones de ustedes. Cualquier comentario será bienvenido

Según tengo entendido, SensorEvent.timestamp es un tiempo transcurrido desde el arranque del dispositivo. Así que tengo que saber el tiempo de actividad del dispositivo. Entonces, si hay un reinicio de un API, será muy fácil, pero no lo he encontrado. Así que estoy usando SystemClock.elapsedRealtime() y System.currentTimeMillis() para 'estimar' el tiempo de actividad de un dispositivo. Este es mi código

private long mUptimeMillis; // member variable of the activity or service 
... 
atComponentsStartUp...() { 
    ... 
    /* Call elapsedRealtime() and currentTimeMillis() in a row 
     in order to minimize the time gap */ 
    long elapsedRealtime = SystemClock.elapsedRealtime(); 
    long currentTimeMillis = System.currentTimeMillis(); 

    /* Get an uptime. It assume that elapsedRealtime() and 
     currentTimeMillis() are called at the exact same time. 
     Actually they don't, but, ignore the gap 
     because it is not a significant value. 
     (On my device, it's less than 1 ms) */ 
    mUptimeMillis = (currentTimeMillis - elapsedRealtime); 
    .... 
} 
... 
public void onSensorChanged(SensorEvent event) { 
    ... 
    eventTimeMillis = ((event.timestamp/1000000) + mUptimeMillis); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(eventTimeMillis); 
    ... 
} 

Creo que esto funciona para aplicaciones que tienen un error de tiempo de milisegundos. Por favor, deja tus ideas.

+0

SystemClock.elapsedRealtimeNanos() es la API que está buscando, sensorTimeStamp en la referencia de hora local del dispositivo = Sistema .currentTimeMillis() + ((event.timestamp-SystemClock.elapsedRealtimeNanos())/1000000L); –

+0

¿Encontró que mUptimeMillis cambia con el tiempo (en un solo arranque)? ¿Qué función usaste para atComponentsStartUp? –