我想显示第一步被检测到的时间。但是应用程序总是显示1970年1月1日。有人会检查什么是错误的,如何改变它吗?下面是我的代码:
public void run() {
SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
mSensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
long timeStamp = sensorEvent.timestamp / 1000000;
textView_moveTime.setText(DateUtils.getRelativeTimeSpanString(timeStamp));
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}, mSensor, mSensorManager.SENSOR_DELAY_FASTEST);
}
2条答案
按热度按时间2ic8powd1#
SensorEvent报告系统 Boot 后的时间(包括休眠时间)(单位为纳秒)。要将其转换为绝对时间(单位为纳秒),请使用以下公式:
zy1mlcev2#
SensorEvent.timestamp
是事件发生的时间,但它是自启动以来经过的时间。它不是事件发生的确切时间戳。我们希望从事件发生以来经过的时间中获得事件发生的实际时间。参考:www.example.comhttps://developer.android.com/reference/android/hardware/SensorEvent#timestamp
1.我们需要将所有实体放在一个类似的单元中,这里我们使用
Millis
。1.我们有三个实体要使用。a)
System.currentTimeMillis()
b)SystemClock.elapsedRealtime()
和c)SensorEvent.timestamp
1.如果我们使用
SystemClock.elapsedRealtimeNanos()
,那么我们需要将其转换为Millis
,如下所示:1.我们需要找出
systemCurrentTimeMillis
和systemClockElapsedRealtimeMillis
之间的差异,如下所示:1.找到差异后,我们需要添加
sensorEventTimeStampMillis
,如下所示:或
1.然后,我们需要将结果转换为UTC,如下所示(我使用
Joda Time
):actualEventTimeUtc
是事件发生的绝对时间。假设传感器在
onSensorChanged.
中报告了一个事件,我们发现当前时间为:换句话说,报告时间是下午13点,而不是实际事件发生的时间。SystemClock.elapsedRealtime()
表示它在过去30小时内一直在运行。换句话说,它在当前时间的30小时前启动。因此,我们从当前时间减去30小时,得到传感器启动的时间,因此,我们得到前一天的上午7点。
SensorEvent.timestamp
表示事件发生在SystemClock.elapsedRealtime().
28小时之后因此,我们在前一天上午7点的基础上加上28小时,得到当天上午11点,这就是事件发生的实际时间。