2015-11-20 13 views
6

Im Folgenden Beispielcode erhalten Ich verwende:Wie kann ich nachfolgende Zeitstempel genau bis zu 5 Mikrosekunden in 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); 
} 

I die Differenz von nachfolgenden Systemzeitstempel Werte in erfordern OnSensorChanged (SensorEvent Ereignis) Funktion nach dem Sensor gestartet.

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

Above Differenz 0 wird oft bei SENSOR_DELAY_FASTEST // Warum ??

Der Unterschied der nachfolgenden Zeitstempel meldet 0, aber gemäß der Definition sollte die Zeit in Nanosekunden angegeben werden, so dass bei 5 Mikrosekunden der Unterschied nicht Null sein sollte. Wie kann ich eine Differenz ungleich null erhalten oder gibt es eine andere Möglichkeit, die Differenz der Systemzeitstempel mit einer Genauigkeit von 5 Mikrosekunden zu erhalten.

Beachten Sie, dass event.timestamp Zeitstempel des Sensors meldet, aber ich brauche Zeitstempel des Systems im OnSensorChanged (SensorEvent-Ereignis), um zu messen, wie genau die Zeitstempel der Sensoren durch Vergleich mit den tatsächlichen Systemzeitstempeln sind.

+0

Sie systemTimeStamp für zwei aufeinander folgende Rückrufe sind die gleichen, manchmal sagen die Ich bin mir sicher, dass du das sagst, da die timeDefference 0 werden kann, wenn du dich durch 1.000.000 dividierst und der Unterschied weniger als 1 ms ist, aber du willst nur sichergehen. – Kaamel

+0

Ja, das ist mein Problem .. gibt es eine Lösung für dieses Problem ..? – kapilgm

+1

Lassen Sie es mich erneut versuchen, da ich nicht sicher bin, welches das Problem ist. Sie protokollieren den Wert von timeDifference. Ist das derjenige, der 0 ist? Wenn dies der Fall ist, ist dies das erwartete Ergebnis, wenn der tatsächliche Unterschied zwischen den Werten in Nanosekunden weniger als 1000000 Nanosekunden beträgt. – Kaamel

Antwort

0

Basierend auf den Kommentaren Sie diese fragen könnte:

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

Sensorereignisse werden gestapelt. Sie können event.timestamp anstelle von SystemClock.elapsedRealtimeNanos() verwenden.

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

+0

Ich benötige die Systemzeitstempel und nicht die Sensorzeitstempel, um die Genauigkeit der Sensormeldewerte über event.timestamp zu überprüfen. – kapilgm