Что в планшете отвечает за сохранение системного времени
Когда включен режим «Использовать часовой пояс сети», телефон должен самостоятельно переключаться на новые часовые пояса. Иногда это не работает и приходится устанавливать часовой пояс вручную.
Почему на телефоне не совпадает время?
Как поменять время на виджете погоды самсунг?
- Настройки—>Общие настройки—>Дата и время. Отключаем автоматическое определение времени
- Ниже появятся дополнительные пункты, в которых необходимо вручную установить часовой пояс, время и дату.
Почему сбивается время на андроид?
Часовой пояс может сбиваться в разных ситуациях: неправильно выставленный регион в планшете или смартфоне, неправильно работающая автосинхронизация (здесь потребуется активировать ручной выбор пояса). Переходим в меню «Дополнительно» и «Регион». Этот пункт можно вывести в «Главное меню» или «Систему».
Почему сбивается время на Андроид
Если вопрос не решится, стоит выполнить сброс Android до заводских настроек и заново установить все параметры.
Что такое системное время?
Системное время — это дата и время, установленные на устройстве.
Как настроить сетевое время на телефоне?
Перейдите в раздел Настройки, войдите в категорию Система и обновления, зайдите в Дата и время, а там переведите тумблер Автонастройка в левое положение. После этого вручную установите часовой пояс, точную дату и время.
Как сделать чтобы не сбивалось время на телефоне?
- Откройте настройки. .
- В настройках зайдите в раздел «Система».
- Если у вас старая версия Андроида, то интересующий нас пункт будет называться «Дата и время».
- Теперь поставьте галочку напротив двух пунктов, а именно «Дата и время сети» и «Часовой пояс сети».
Как узнать системное время Windows?
Перейдите на рабочий стол. В правом нижнем углу экрана на панели задач найдите часы. Нажмите на часы правой кнопкой мыши и выберите Изменение настроек даты и времени.
Мы сели, подумали, и нашелся другой приемлемый вариант — вести свое с блэкджеком и . независимое от девайса время.
Данное решение не гарантирует точности до миллисекунд. Допускается погрешность 1-4 минуты.
Не защищено от взлома (обхода) особо продвинутыми юзерами. Если уж на то пошло, ломается все. Рассчитано на среднестатистического обывателя.
Итак, начнем.
Для начала создадим класс, который будет отвечать за хранение времени. В качестве места я выбрал SharedPreferences.
Т.к. тут делаются банальные вещи, то спрячу в спойлер, чтобы не мозолило глаза.
Далее будет класс, который предоставляет основное api. Он сохранит и отдаст время, сам запустит таймер, который будет обновлять время.
Тоже все довольно обыденно. Единственное, что тут интересно: при установке серверного времени мы должны сначала остановить таймер, сохранить новое серверное время, а затем вновь запустить.
Перейдем к интересному. Вся основная логика пришлась на ресивер.
Ресивер подписан на три события: стартовать при загрузке, стартовать при выключении, стартовать при обновление времени.
Что должно происходить при обновлении времени — ясно, должно инкрементиться время.
Значение для TIME_PERIOD было выбрано 30 секунд. И нет, это не влияет на батарею. Приложение, в котором это работает, всегда установлено на моем устройстве, и все клёво.
Следующий шаг — запоминать системное время, чтобы мы могли знать примерное время, которое устройство было выключено.
И, наконец, самое важное — вычисление времени, которое девайс находился в выключенном состоянии.
Сначала получим последнее сохраненное время системы
и вычислим время в выключенном состоянии
если оно меньше или равно нулю, значит, мы наткнулись на перевод времени назад. Перевод вперед нас не особо интересовал, да и отследить его весьма трудно.
добавляем его к текущему и запускаем таймер
Вот и все. Готово.
Не забываем про добавление разрешения в манифест
Итогом стала работающая система ведения времени на устройстве. Да, она не идеальна, но поставленную задачу решает хорошо.
Прочитав статью «Переезд временной зоны MSD в MSK — новый Y2K локального масштаба» — вспомнил, что вместе с коллегой по работе уже давно решил эту проблему на Android (HTC Hero) и хотел написать в песочницу, но все откладывал на потом. А сегодня появилась очередная статья «Обновление временных зон на Android» практически похоронившая идею написания и, подтвердившая идею, что не надо откладывать важные вещи на потом. Но… немного повспоминав, я всё-таки решился, потому что в данных статьях рассматривалась проблемы связанные с переходом на зимнее/летнее время и совсем не затрагивался момент касающийся работы виджета часов с погодой и автоматического определения времени через оператора сотовой связи.
Все началось с того, что был приобретен новый телефон HTC Desire S.
В процессе настройки выяснилось, что в настройках даты и времени нет возможности выбрать мой город — Новосибирск и приходиться выбирать альтернативный город с подходящим часовым поясом.
Так же выяснилось, что синхронизация времени от оператора работает как-то загадочно и виджет HTC Clock в режиме отображения погоды и включенной автоматической синхронизацией отображает некорректное время.
На картинке может показаться, что всё в порядке, однако время на самом деле на телефоне убежало на час назад. Можно отключить автоматическое определение и выставит зону руками, но тогда получим следующее:
Как видно, Новосибирск в списке отсутствует. Нам пришлось выбрать Bangkok, при этом системное время в телефоне стало правильным, но виджет отображает по-прежнему со смещением на час назад.
Попробовали найти решение в сети. Обнаружили что мы не одиноки, причем подобные проблемы существуют не только у жителей Новосибирска, но и у жителей других городов планеты. Комплексного решения всех указанных проблем мы не обнаружили.
Можно было на все это забить, отключить, выставлять руками и не обращать внимания на виджет, но… это же Android — а это значит, что мы можем и должны его победить!
И так, мы начинаем
Новый телефон был на тот момент не рутованый и сделать его таковым не представлялось возможным. Поэтому для экспериментов был взят HTC Hero с оригинальной прошивкой + root/busybox/apps2sd, на котором были точно такие же проблемы.
Нашли через osmonitor приложение, в котором выбирается часовой пояс — (com.android.settings). Посмотрели исходники пакета com.android.settings и выяснили, что ресурсы загружаются из XML файла timezones.xml.
Достали apk этого приложения /system/app/Settings.apk следующей командой:
Не стану описывать все подробности работы APK manager и Android SDK tools, думаю, заинтересованные люди легко разберутся. Остановлюсь только на ключевых моментах.
Получившийся apk поместили обратно в телефон:
Этим мы добились того что в списке ручного выбора временной зоны появился Novosibirsk.
Кроме того, еще в одну базу добавили запись о нашем городе, а именно в /system/etc/timezones.db
Добавили запись, timezoneId: Asia/Novosibirsk, остальные поля Novosibirsk, ru – Новосибирск.
Для того чтобы все сделанные изменения вступили в силу, сбросили кэш для приложений
Clock, Settings и Weather Provider. Ну и для полной уверенности перезапустили телефон.
Итоги
В результате получили вот такие пироги:
Как мы видим, в автоматическом режиме зона определяется корректно, системное время и время на виджете одинаковое, ну и в ручном режиме все в порядке.
Ввязавшись в войну со временем, мы решили идти до конца. А именно решить и проблему отмены перехода на зимнее/летнее время.
Скачали самую свежую tzdata (aka timeinfo.dat) с, тогда еще доступного, ресурса elsie.nci.nih.gov/pub
Обнаружили, что в ней про нас еще не подумали, поправили, подготовили и залили в телефон. На момент написания статьи, данная база уже содержит правильные настройки для нашей необъятной страны, а как решать эту проблему, замечательно описано в статье «Обновление временных зон на Android»
П.С. уже после публикации случайно обнаружил статью описывающую добавление нового города HTC Sense и виджет погоды — добавляем свой город слегка пересекающуюся с данной.
Предположим, вы уже давно используете Android, а потому может показаться, что он прекрасно справляется с задачами синхронизации времени – будильники срабатывают вовремя, каких-то явных отклонений времени не наблюдается и т. д. Однако уверены ли вы полностью в том, откуда Android на самом деле получает данные о точном времени и часовых поясах? Если у вас есть хоть какие-то сомнения о том, как это работает — добро пожаловать под кат.
В Android существует две проблемы со временем: это его непредсказуемая синхронизация и необходимость в актуализации данных о часовых поясах даже в самой свежей версии ОС.
Предыстория: Android является мобильной ОС, базирующейся на ядре Linux, он спокойно подключается к интернету и, конечно же, можно предположить, что синхронизация времени осуществляется с помощью NTP, однако, это не так. Исторически сложилось, что Android был предназначен для использования исключительно в мобильных телефонах (вспомните версию 1.6). При этом только к 3 мажорной версии он обзавёлся интерфейсом для планшетов и начали́сь другие подвижки к унификации интерфейса и начинки ОС. Однако даже версии 4.4 и Android L получают сигналы точного времени теми же методами, что их получала Nokia 3310 и другие, более ранние GSM/3GPP телефоны, т. е. от вышек сотовой связи при регистрации в сети (при подключении к вышке). При этом планшеты или другие устройства без модуля связи, в принципе не имеют возможности синхронизировать время автоматически.
К великому сожалению, чтобы научить Android синхронизировать время полностью автоматически с помощью NTP нам понадобиться root доступ ибо API для точной установки времени в Android ныне отсутствует.
Приступим. Первое, что необходимо сделать, это выключить синхронизацию времени с мобильной сетью. При этом установку часового пояса я рекомендую оставить в автоматическом режиме, а отключать её стоит, только если есть гарантия, что устройство будет работать в стационарном режиме.
Далее, необходимо установить приложение ClockSync, которое и будет выступать для нас альтернативой демону синхронизации времени с помощью NTP.
На скриншотах видно, что разница с точным временем оказалась достаточно маленькой, однако, бывают разные ситуации, у некоторых время на устройстве может даже плавать туда-сюда поскольку оператор не удосужился навести порядок у себя на БС.
Убедившись, что всё работает, настроим автоматическую синхронизацию в программе ClockSync. Для повышения точности я рекомендую включить опции «Режим высокой точности» и «Только через WI-FI». Если с первой опцией всё понятно из описания в программе (см. скриншот ниже), то вторую опцию я рекомендую включить в первую очередь не из соображений экономии мобильного трафика, а из-за того, что мобильный интернет не способен гарантировать хоть сколько-нибудь стабильные задержки.
Всё ещё распространённый мобильный интернет 2-го (GPRS/EDGE) в принципе не в состоянии обеспечить стабильные задержки при передаче. Даже интернет 3-го (3G) и, в некоторой мере, 4-го (LTE/LTE-advanced) поколений при сильной загрузке сети или каналов связи между БС, что является типичной ситуацией для крупных населённых пунктов, не может гарантировать стабильные задержки. Поэтому даже с аппроксимацией конечная точность установки времени может быть хуже долей секунд и даже легко достигать нескольких секунд.
Помимо этого я рекомендую включить опцию «При включении», чтобы лишний раз не выводить устройство из глубокого сна и тем самым сэкономить энергию.
В связи с масштабными изменениями часовых поясов в РФ осенью этого года необходимо уже сейчас задуматься об актуализации информации о них на всех устройствах и если с поддерживаемыми настольными ОС проблем не возникает, то в Android даже самая свежая версия ОС содержит устаревшие данные. Для того чтобы в этом убедиться устанавливаем TimeZone Fixer и наблюдаем неприглядную картину.
Скриншот программы TimeZone Fixer, запущенной на Android 4.4.4 (прошивка Cyanogenmod от 4 августа 2014), на котором хорошо видно, что данные в прошивке неактуальные:
Автор программы TimeZone Fixer предупреждает нас, что обновление файлов данных о часовых поясах может полностью «сломать» устройство и даже даёт рекомендации о том как обезопасить себя от дополнительных проблем, хоть случаи проблем единичные и очень специфичные — это действительно хорошая забота о простых пользователях.
Только поэтому я и внёс этот кусочек в статью, он хоть и не имеет непосредственного отношения к проблеме, но это действительно хороший пример заботы о пользователях. В то же время предупреждение насчёт версий 4.3+ вызвано лишь малым количеством отзывов о программе для устройств с новыми версиями ОС, поэтому, пожалуйста, после использования обязательно напишите о́тзыв об этом приложении.
После обновления данных о часовых поясах программа предло́жит перезагрузится, однако, я рекомендую перезагрузить устройство самостоятельно через системное меню поскольку программа осуществляет перезагрузку фактически эквивалентную reset, что, пусть и с малой вероятностью, но может привести к проблемам и потери данных.
С удовольствием отвечу на любые вопросы или внесу дополнения, которые сообщество посчитает необходимыми, однако, хочется избежать перегруженности статьи дополнительной информацией, дабы придерживаться формата компактного руководства по решению конкретной проблемы.
UPD: Эта инструкция полностью решает проблему часовых поясов только для версий младше 4.4. С версии 4.4 нужен дополнительный патчинг, пока вопрос находится на стадии исследования возможностей для создания юзер-френдли решения.
Купив новый мобильный гаджет, пользователи могут столкнуться с проблемой неправильно заданных часовых поясов, текущей даты и времени. Решить ее, впрочем, можно достаточно просто, и в этом руководстве мы расскажем, как настроить дату и время на смартфоне под управлением Андроид.
Как работает системное время?
Системные часы инициализируются от аппаратных при загрузке операционной системы, и далее системное время поддерживаются с помощью регулярных прерываний от таймера. Например, в системе Linux текущее время можно узнать в командной строке с помощью команды date, а показания аппаратных часов — hwclock.
Устанавливаем параметры времени
Чтобы установить время на андроиде, нужно выполнить несколько простых действий:
Шаг 1. Запустите Настройки, пройдите в категорию «Система и устройство» и выберите раздел «Дополнительно».
Шаг 3. В открывшемся окне вы сможете выставить время, поменять дату, выбрать формат отображения времени и даты, установить часовой пояс, а также задать автоматическое получение настроек.
Обратите внимание: параметры даты и времени могут быть скрыты в других подразделах, например, в расширенных настройках. Это зависит от версии Android.
Перейти к параметрам даты и времени можно и другим путем – через приложение Часы:
Шаг 1. Запустите приложение Часы.
Шаг 3. Нажмите на кнопку «Настройки даты и времени».
Как настроить системные часы и календарь?
Как установить время и дату на экране телефона?
- Коснитесь свободного участка на главном экране и удерживайте его.
- В нижней части экрана выберите Виджеты.
- Нажмите на виджет и удерживайте его.
- Вы увидите изображения главных экранов. Перетащите часы на главный экран.
Как установить системное время и дату?
- Вызовите команду Пуск - Панель управления - Дата и время. Откроется диалоговое окно Свойства: Дата и время.
- Откройте вкладку Дата и время,
- На панели Дата выберите год, месяц и число.
- На панели Время с помощью трех-секционного счетчика установите текущее время с точностью до секунды.
Что значит Введите системное время?
Системное время (system time) - текущая дата и время дня. Система сохраняет время так, чтобы у Ваших приложений был свободный доступ к точному времени. Система базирует системное время на универсальном глобальном времени (UTC).
Почему в приложениях другое время?
В Android существует две проблемы со временем: это его непредсказуемая синхронизация и необходимость в актуализации данных о часовых поясах даже в самой свежей версии ОС. . При этом планшеты или другие устройства без модуля связи, в принципе не имеют возможности синхронизировать время автоматически.
Заключение
Следуя рекомендациям из этого руководства, вы всегда будете знать точное время и дату на вашем гаджете.
Читайте также: