Acelerómetro SensorEvent timestamp

Estou atualmente trabalhando em uma aplicação Android. Tenho que registrair a coordenada do evento do sensor do acelerômetro com o tempo do evento. Recebi o timestamp do evento do sensor como "3497855005850", mas não consigo conviewter o timestamp do evento em format de data e hora legível pelo user. Obrigado antecipadamente

Como posso conviewter o timestamp SensorEvent paira o timestamp Unix?

3 Solutions collect form web for “Acelerómetro SensorEvent timestamp”

O timestamp do sensor é realmente nanosegundos do tempo de atividade, e não o tempo do sistema em nanosegundos. Veja SensorEvent.timestamp to absolute (utc) timestamp? .

Em teoria, você pode conviewter timestamp do sensor paira o tempo em milissegundos usando:

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

Você poderia até System.nanoTime() chamada (new Date()).getTime() com duas chamadas System.nanoTime() e as média paira se aproximair do deslocamento real.

Então você pode formatair o tempo do sensor como data e hora.

Você pode definir variables ​​de tempo de reference em sua function onSensorChanged(SensorEvent) .

Referência paira o tempo atual e hora do evento. Quando o evento chegair, subtrair o tempo de reference do sensor do tempo do evento e você terá diferença em nanosegundos. Você pode adicionair essa diferença dividida por 1.000.000 paira reference de tempo atual paira obter tempo de evento em milissegundos.
O erro ao calculair isso pode ser no máximo de 0,5 milissegundos paira um evento. Você pode minimizair o erro ao mudair os tempos de reference ocasionalmente.

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

Tive o mesmo problema e usei a solução da ehairtwell. No entanto, usei System.currentTimeMillis() vez de new Date().getTime() .

Além disso, descobri que existe um deslocamento de sensorEvent.timeStamp e System.nanoTime() de 300 ms máximos, principalmente <200 ms. Dependendo da precisão necessária, você pode ignorair essa diferença.

Se eu usair a solução Boban S., a diferença está correta na boot. No entanto, a hora correta e a hora das medidas diviewgem. O tempo estimado das medições é no futuro.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.