Не все сотовые операторы поддерживают функцию автоматической настройки времени, используя механизм NITZ. Если у вас включена эта опция, это не означает что она работает. Даже если оператор поддерживает NITZ, довольно часто сотовые вышки могут присылать неправильное время. Кроме того, существуют устройства без SIM карт, например планшеты, для них эта функция вообще не работает. Если системная опция автоматического определения времени работает правильно, то вам повезло, возможно, ClockSync вам не пригодится. В противном случае рекомендуется отключить автоматическое определение чтобы избежать конфликтов между приложениями.
Протокол NTP используемый для синхронизации времени работает через UDP соединение, порт 123. Ваш маршрутизатор, локальный или корпоративный файрвол, прокси сервер, либо Интернет провайдер (включая сотового оператора) может блокировать доступ к публичным NTP серверам. При блокированном доступе к NTP ClockSync не сможет получить точное время. Для решения проблемы вы можете попробовать WiFi соединение вместо 3G/LTE, или наоборот. Обратитесь к системному администратору, в техподдержку провайдера или сотового оператора чтобы узнать почему доступ к NTP заблокирован и что с этим можно сделать.
В планах развития ClockSync есть новые функции, которые позволят синхронизировать время при заблокированном доступе к NTP. К ним относится синхронизация через GPS и получение времени из HTTP заголовков публичных серверов (точность будет меньше чем у NTP, но это лучше чем полное отсутствие синхронизации).
Операционная система Android запрещает сторонним приложениям менять системное время, это ограничение безопасности. Чтобы его обойти, необходимо получить права root. Начиная с версии 1.1.2 вы можете использовать режим Без root для ручной синхронизации. Подробнее про root.
Этот режим делает программу ClockSync полезной даже если на вашем устройстве нет root. Когда он включен, ClockSync покажет уведомление при разнице системных часов и точных часов выше заданного порогового значения (по умолчанию 60 секунд). Нажмите на уведомление чтобы запустить режим помощи в установке времени. Этот же процесс можно запустить нажатием на системном времени или через меню Синхронизировать. Программа откроет системный диалог Дата и Время и покажет подсказку, когда и какое время выставить. Вам необходимо вручную выставить нужное время следуя подсказке на экране, как только время установлено с максимально возможной точностью, режим помощи отключится и вы вернетесь в приложение ClockSync. Режим помощи можно прервать нажав на уведомление.
В худшем случае точность будет в районе 30 секунд (если ваше устройство не сбрасывает секунды). Почему не 60 секунд? ClockSync автоматически учитывает разницу между текущим значением секунд системного времени и точного времени. Если эта разница больше 30 секунд, то будет предложено установить на 1 минуту больше, если разница меньше минус 30 секунд — на минуту меньше.
Некоторые устройства (в основном Samsung и HTC) сбрасывают секунды при ручной установке времени. Начиная с версии 1.1.5 в ClockSync появилась специальная опция: "Обнуление секунд". Если она включена, подсказка в ручном режиме попросит вас установить время на одну минуту вперед текущего точного времени и будет показывать обратный отсчет до момента, когда наступит следующая минута по точному времени. Таким образом, при нажатии кнопки Установить в этот момент, вы получите точное время на устройстве (точность зависит только от скорости вашей реакции). Для дополнительной помощи в этой задаче ClockSync начнет проигрывать сигнал точного времени за 5 секунд до наступления следующей минуты. Сигнал представляет из себя 5 коротких гудков и 1 длинный. Вам нужно установить время после 5-го короткого гудка, в самом начале 6-го (длинного) гудка, обозначающего начало новой минуты.
Для максимальной пользы от программы в режиме без root должна быть включена автоматическая синхронизация (которая работает как автоматическая проверка времени) и опция "Показывать уведомление".
Изначально ClockSync использует системный вызов System.setCurrentTimeMillis() для установки времени. Чтобы он работал, с помощью root изменяются права устройства /dev/alarm. Этот метод возвращает false в случае ошибки. Обычно это происходит если время изменить не удалось (например, из-за защиты KNOX/SELinux на устройствах Samsung и в свежих версиях Android). В таком случае ClockSync использует альтернативный метод установки времени через команду date. Существует очень маленький процент устройств, где setCurrentTimeMillis возвращает ошибку, но при этом время на самом деле выставляется корректно. Все бы было хорошо, но на некоторых устройствах вызов команды date приводит к установке неправильного времени (различие в параметрах, нестандартная версия утилиты date).
Из-за наложения этих двух ошибок ClockSync собьет время и предложит обратиться к разработчику. Включите эту опцию если такое происходит на вашем устройстве. В этом случае ClockSync будет игнорировать результат вызова setCurrentTimeMillis и не будет использовать команду date для установки времени. К сожалению, это не поможет если date является единственным способом установки времени на вашем устройстве, но при вызове из ClockSync приводит к неправильной установке времени. Свяжитесь со мной если эта проблема затрагивает ваше устройство, попробуем разобраться.
Если у вас отключена опция автоматической синхронизации при загрузке, ClockSync не будет ничего делать и моментально завершится. Система освободит память автоматически, как только в этом возникнет необходимость, вам не нужно об этом волноваться. До версии 1.1.3 при загрузке устанавливались таймеры для автоматической синхронизации с нужным интервалом, но в новых версиях таймеры выставляются по событию наличия сетевого подключения и удаляются при отключении сети, это позволяет максимально экономить батарею, т.к. при отсутствии Интернета ClockSync даже не будет запускаться. Начиная с версии 1.1.6 при загрузке также устанавливается таймер для перевода на зимнее/летнее время, но только если включена "Автономная база" и это актуально для выбранного часового пояса. Для России это больше не актуально, поэтому такой таймер не ставится.
Скорее всего это связано с настройками часового пояса. За более подробной информацией обратитесь к разделу О часовых поясах.
Также убедитесь что отключена опция автоматической установки времени и даты в настройках системы и у вас не установлено других приложений, которые могут менять время или часовой пояс (например, навигационное ПО).
Если на вашем устройстве время очень быстро убегает, то сразу после синхронизации смещение может превышать секунду, в таких случаях рекомендуется уменьшить интервал автоматической синхронизации.
Если вы сравниваете точное время с телевизором или радио, имейте в виду, что в цифровую эпоху к задержке распространения сигнала добавляется еще и задержка цифрового оборудования, ресиверов, буферы декодеров в несколько секунд и т.д. Разница с точным временем может достигать десятков секунд.
Это сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью. Читайте статью в Wikipedia для более подробной информации.
Да, есть возможность использовать GPS для получения времени, но это непрактично по нескольким причинам. Самая главная причина в том, что Android не поддерживает функцию PPS (pulse-per-second), которая необходима для точной синхронизации с устройством GPS. Без этой функции максимальная точность синхронизации будет около 300мс, вместо 1-10мс при использовании NTP. Другая причина в том, что GPS требует долгого старта, открытого неба, сильно расходует батарею. Это делает автоматическую синхронизацию с GPS не очень полезной для большинства пользователей, т.к. в ваших квартирах и офисах, где вы находитесь большинство времени, скорее всего нет видимости спутников. Я планирую добавить синхронизацию с GPS в одном из будущих обновлений ClockSync для случаев, когда вы находитесь в роуминге или в районе без Интернета. В настоящий момент есть несколько известных проблем с GPS на платформе Android, которые делают невозможным получение времени с GPS устройства на многих Android устройствах. До тех пор, пока эти проблемы не будут исправлены, эта возможность будет работать не на всех устройствах. Если вам нужна синхронизация с GPS, воспользуйтесь другой программой из Маркета: GPS Time.
Чтобы иметь возможность устанавливать время, ClockSync изменяет права устройства /dev/alarm
, делая его
доступным на запись для всех пользователей. Если вы включите эту опцию, то каждая синхронизация времени будет вызывать
приложение su (Superuser) 3 раза: для проверки наличия root, для установки прав на запись, и для восстановления старых
прав. Если вы боитесь что какое-то другое приложение сможет использовать права на запись к этому устройству в каких-то
нехороших целях, включите эту опцию. Имейте в виду, что каждый вызов su относительно дорогая операция в плане ресурсов
процессора, памяти и батареи. При отключенной опции ClockSync выставляет права только один раз, все последующие разы,
если права на запись есть, su вообще не вызывается, что экономит ресурсы устройства и делает процесс синхронизации
времени мгновенным.
Прежде всего убедитесь что у вас включена опция "Фоновой режим" в настройках аккаунтов и синхронизации, иначе сервис ClockSync не будет использовать сеть в фоне. Если вы включили опцию "Только через WiFi", имейте в виду, что у вас может быть включен Спящий режим в дополнительных настройках WiFi, при котором WiFi будет отключаться, когда экран устройства выключен, и ClockSync не будет синхронизироваться в это время. Опция "При включении" может работать некорректно на некоторых устройствах, отключите ее если синхронизация не происходит. Для диагностики проблем синхронизации используйте функцию "История и Статистика".
Интервалы, отмеченные звездочкой (15/30 минут, 1/12 часов, 1 день), могут срабатывать не обязательно точно для экономии батарейки. Система Android делает так, что несколько неточных таймеров от разных приложений срабатывали одновременно, чтобы лишний раз не будить устройство. Первое срабатывание таймера будет не раньше чем заданный интервал, но может пройти еще практически столько же времени до того как таймер сработает. Другими словами, время между срабатываниями таймера будет различаться.
Эта опция может быть полезна для коротких интервалов, но может стать проблемой если вы используете длинный интервал, например 1 день. В этом случае синхронизация не гарантирована точно через день, а может произойти почти через 2 дня. Если вы включите опцию "Точный интервал", то таймер сработает точно через заданный интервал что позволяет сделать синхронизацию более стабильной и предсказуемой в случае если вы используете длинный интервал.
Более высокая точность синхронизации достигается двумя техниками. Первая заключается в опросе NTP сервера 5 раз подряд с задержкой в одну секунду между запросами, после чего берется среднее значение 5 смещений. Несмотря на то что протокол NTP учитывает задержки передачи пакетов, постоянно меняющаяся сетевая среда все равно немного сказывается на точности. Использование среднего значения позволяет увеличить точность. Вторая хитрость — полностью разбудить устройство. В обычном режиме ClockSync будит устройство не полностью и не дает ему заснуть, пока не закончится синхронизация. Из-за экономичного режима работы при неполном пробуждении задержки передачи пакетов возрастают в несколько раз, что сказывается на точности.
У этого режима есть побочный эффект! Использование режима полного пробуждения влечет за собой включение экрана устройства на время синхронизации (в режиме пониженной яркости). Если вам не нужна супер высокая точность или вас раздражает включение экрана, не включайте режим высокой точности. Имейте в виду, выигрыш в точности сильно зависит от устройства и сетевого подключения, на некоторых устройствах можно добиться улучшения на 300мс при фоновой синхронизации. Для максимального эффекта рекомендуется прописать фиксированный IP адрес NTP сервера, т.к. адрес по умолчанию (pool.ntp.org) перенаправляет на случайный сервер, что приводит к расхождениям в точности между синхронизациями. Именно разница в точности между серверами и разница в задержках при фоновой и приоритетной синхронизациях могут привести к наблюдаемой разнице в смещении в несколько сотен миллисекунд, даже если последняя синхронизация была совсем недавно.