Android AccessibilityService getEventTime () формат времени - PullRequest
0 голосов
/ 06 марта 2019

Я использую AccessibilityService на Android 7. Можно получить временную метку каждого AccessibilityEvent, вызвав getEventTime().Согласно документации этот метод «Получает время, за которое было отправлено это событие».

Кто-нибудь знает, что относится к возвращаемому значению из getEventTime()?Это не похоже на время Unix.

1 Ответ

1 голос
/ 07 марта 2019

AccessibilityManagerService

Этот класс создается системой как служба системного уровня и может быть доступна только системе.Задачей этой службы является централизованная отправка событий для {@link AccessibilityEvent}, генерируемых во всех процессах на устройстве.События отправляются в {@link AccessibilityService} s.

Внутри AccessibilityManagerService исходный код.

private void sendAccessibilityEventLocked(AccessibilityEvent event, int userId) {
    // Resync to avoid calling out with the lock held
    event.setEventTime(SystemClock.uptimeMillis());
    mMainHandler.sendMessage(obtainMessage(
            AccessibilityManagerService::sendAccessibilityEvent,
            this, event, userId));
}

Как вы можете видеть, перед отправкой события вПоток пользовательского интерфейса, они передают SystemClock.uptimeMillis() в качестве параметра в метод setEventType.

Кто-нибудь знает, к чему относится возвращаемое значение из getEventTime ()?

getEventTime() метод возвращает значение, переданное в метод setEventType(time).

SystemClock.uptimeMillis ()

общедоступный статический long uptimeMillis ()

Возвращает миллисекунды с момента загрузки, не считая времени, проведенного в глубоком сне.

Обновление: На основании вопроса автора

Если я получаю время загрузки, а затем добавляю uptimeMillis (), это эквивалентно System.currentTimeMillis ()?

Нет, это не так.

С SystemClock документация для Android.

SystemClock.uptimeMillis ()

n миллисекунд с момента загрузки системы.Эти часы останавливаются, когда система переходит в глубокий режим сна (процессор выключен, дисплей не светится, устройство ожидает внешнего ввода), но на него не влияют масштабирование часов, режим ожидания или другие механизмы энергосбережения

System.currentTimeMillis()

- это стандартные «настенные» часы (время и дата), выражающие миллисекунды с начала эпохи.Настенные часы могут быть установлены пользователем или телефонной сетью (см. SetCurrentTimeMillis (long)), поэтому время может непредсказуемо прыгать назад или вперед.Эти часы следует использовать только тогда, когда важна переписка с реальными датами и временем, например, в приложении с календарем или будильником.Для измерения интервала или истекшего времени следует использовать другие часы.Если вы используете System.currentTimeMillis (), попробуйте прослушать трансляции с намерениями ACTION_TIME_TICK, ACTION_TIME_CHANGED и ACTION_TIMEZONE_CHANGED, чтобы узнать, когда время меняется.

Короче говоря, SystemClock.uptimeMillis() возвращает время загрузки из миллисекунд, он будет сбрасываться каждый раз, когда пользователи выключают телефон и снова перезагружаются.Например, вы включаете телефон через 10 секунд, если вы вызываете этот метод, он вернется (10 * 1000 = 10000), через 20 секунд он будет 20000 и т. Д.

Вс другой стороны, System.currentTimeMillis() вернет время с Время эпохи в миллисекундах.Он преобразует текущую дату и время в миллисекунды, поэтому это произойдет, если вы измените текущую дату и время в настройках или используете setCurrentTimeMillis(long) API.

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