2011-10-14 5 views
5

Sto leggendo i valori di data/ora dai dati SensorEvent ma non riesco a calcolare il tempo di riferimento per questi valori. documentazione Android dice solo "Il tempo in nanosecondo in cui l'evento è accaduto" Per fare un esempio:Tempo di riferimento sensore ora solare

Il mio attuale data dispositivo Android, 14 Ottobre 2011 23: 29: 56,421 (GMT + 2)

System.currentTimeMillis * 1000000 (nanosec) = 1318627796431000000 (ok)

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

Mi aiuti?

grazie

+0

Vedere qui: http://stackoverflow.com/questions/3498006/sensorevent-timestamp-to-absolute-utc-timestamp – goto10

risposta

3

Sembra che ciò che si sta trattando è il numero di nanosecondi dal momento che il sistema operativo avviato, noto anche come "uptime".

Ulteriori informazioni sul tema: http://code.google.com/p/android/issues/detail?id=7981

Vorrei aggiungere che la questione legata SensorEvent.timestamp to absolute (utc) timestamp? offerte con lo stesso problema ed è dove ho trovato la risposta.

+1

Grazie a goto10 e manu3d, finalmente la risposta è che il timestamp è il tempo di attività del dispositivo in nanosec. –

+2

Non è sempre. Sul mio Nexus 4, sono i nanosecondi dall'epoca (inizio del 1970). Forse si potrebbe dedurre assumendo che il SensorEvent verrà elaborato rapidamente e testandolo contro i tempi di attività e l'inizio del 1970. – davtom

1

So che è una domanda molto vecchia, ma sono anche in difficoltà per convertire SensorEvent.timestamp in un tempo leggibile dall'uomo. Quindi scrivo qui quello che ho capito finora e come lo sto convertendo per ottenere soluzioni migliori da voi ragazzi. Eventuali commenti saranno accolti

Come ho capito, SensorEvent.timestamp è un tempo trascorso dall'avvio del dispositivo. Quindi devo sapere il tempo di attività del dispositivo. Quindi, se c'è un avvio del dispositivo di ritorno API, sarà molto facile, ma non l'ho trovato. Quindi sto usando SystemClock.elapsedRealtime() e System.currentTimeMillis() per "stimare" il tempo di attività di un dispositivo. Questo è il mio codice

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); 
    ... 
} 

Penso che questo funzioni per le app che un errore di millisecondo è okey. Per favore, lascia le tue idee.

+0

SystemClock.elapsedRealtimeNanos() è l'API che stai cercando, sensorTimeStamp nel riferimento orario locale del dispositivo = Sistema .currentTimeMillis() + ((event.timestamp-SystemClock.elapsedRealtimeNanos())/1000000L); –

+0

Hai trovato che mUptimeMillis cambia nel tempo (in un unico avvio)? Quale funzione hai utilizzato per atComponentsStartUp? –