2015-11-20 36 views
6

Poniżej przykładowy kod używam:Jak mogę dostać kolejne znaczniki czasu dokładnego zapisu do 5 mikro sekund android

private final SensorManager mSensorManager; 
private final Sensor mAccelerometer; 
private long prevTime=0; 

public SensorActivity() { 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST); 
} 

wymagam różnicę wartości czasu i daty późniejsze systemowych w OnSensorChanged (Zdarzenie SensorEvent) po uruchomieniu czujnika.

public void onSensorChanged(SensorEvent event) { 
    long systemTimeStamp= SystemClock.elapsedRealtimeNanos(); 
    long timeDifference = (systemTimeStamp - prevTime)/1000000; //msec   
    Log.e("PROBLEM",timeDifference); 
    prevTime=systemTimeStamp; 
} 

Powyższa różnica zmienia się na 0 razy wielokrotnie na stronie SENSOR_DELAY_FASTEST // Dlaczego?

Różnica kolejnych raportów znaczników czasu 0, ale zgodnie z definicją powinna raportować czas w nanosekundach, więc przy 5 mikro sekundach różnica nie powinna wynosić zero. Jak mogę uzyskać różnicę różną od zera lub istnieje inny sposób uzyskania różnicy czasu systemowego z dokładnością do 5 mikrosek.

Należy pamiętać, że event.timestamp zgłasza znaczniki czasu czujnika, ale potrzebuję znaczników czasu systemu w zdarzeniu OnSensorChanged (zdarzenie SensorEvent), aby zmierzyć, jak dokładne są znaczniki czasu czujnika, porównując je z rzeczywistymi znacznikami czasowymi systemu.

+0

mówisz systemTimeStamp przez dwa kolejne wywołania zwrotne są takie same, czasami? Jestem pewien, że właśnie tak mówisz, ponieważ czas może wynosić 0, kiedy dzielisz 1000 000, a różnica jest mniejsza niż 1 ms, ale po prostu chcesz się upewnić. – Kaamel

+0

tak, to jest mój problem .. czy istnieje rozwiązanie tego problemu ..? – kapilgm

+1

Pozwól mi spróbować ponownie, ponieważ nie jestem pewien, który z nich jest problemem. Logujesz wartość timeDifference. Czy to ten, który ma 0? Jeśli tak, to jest oczekiwany wynik, gdy rzeczywista różnica między wartościami w nanosekundach jest mniejsza niż 1000000 nanosekund. – Kaamel

Odpowiedz

0

Na podstawie uwag może być pytanie o to:

public void onSensorChanged(SensorEvent event) { 
    long systemTimeStamp= SystemClock.elapsedRealtimeNanos(); 
    double timeDifference = ((double) (systemTimeStamp - prevTime))/1000000d; //msec   
    Log.e("No PROBLEM",timeDifference); 
    prevTime=systemTimeStamp; 
} 
0

Czujniki zdarzeń są grupowane. Możesz użyć event.timestamp zamiast SystemClock.elapsedRealtimeNanos().

Patrz: https://source.android.com/devices/sensors/batching.html

+0

Wymagam systemowych znaczników czasu, a nie znaczników czasu czujnika do sprawdzania dokładności wartości raportowania czujników za pomocą zdarzenia.timestamp. – kapilgm