Контрольная отметка времени датчика Android - PullRequest
6 голосов
/ 15 октября 2011

Я читаю значения меток времени из данных SensorEvent, но не могу определить эталонное время для этих значений. В документации Android просто говорится: «Время в наносекунде, в которое произошло событие». Например:

Моя текущая дата устройства Android, 14 октября 2011 г. 23: 29: 56.421 (GMT + 2)

System.currentTimeMillis * 1000000 (наносек) = 1318627796431000000 (это нормально)

sensorevent.timestamp (наносек) = 67578436328000 = 19 часов 46 минут ????

Можете ли вы мне помочь?

спасибо

Ответы [ 2 ]

4 голосов
/ 15 октября 2011

Похоже, что вы имеете дело с количеством наносекунд с момента запуска операционной системы, также известным как «время безотказной работы».

Дополнительная информация о выпуске: http://code.google.com/p/android/issues/detail?id=7981

Я должен добавить, что связанный вопрос SensorEvent.timestamp к абсолютной (utc) отметке времени? имеет дело с той же проблемой и где я нашел ответ.

1 голос
/ 17 февраля 2016

Я знаю, что это очень старый вопрос, но я также борюсь за преобразование SensorEvent.timestamp в удобочитаемое время. Итак, я пишу здесь то, что я понял до сих пор и как я конвертирую это, чтобы получить лучшие решения от вас, ребята. Любые комментарии будут приветствоваться.

Как я понял, SensorEvent.timestamp - это время, прошедшее с момента загрузки устройства. Поэтому я должен знать время работы устройства. Так что, если есть API, возвращающий загрузку устройства, это будет очень легко, но я не нашел его. Поэтому я использую SystemClock.elapsedRealtime() и System.currentTimeMillis(), чтобы «оценить» время работы устройства. Это мой код.

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

Я думаю, что это работает для приложений, когда ошибка в миллисекундах является окей. Пожалуйста, оставьте свои идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...