Как синхронизировать время на андроиде с компьютером

Обновлено: 03.07.2024

Прочитав статью «Переезд временной зоны 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 и виджет погоды — добавляем свой город слегка пересекающуюся с данной.

Синхронизация андроид с ПК

Как выполняется синхронизация на андроид

Способы синхронизации условно разделены на 4 категории:

  • Подключение напрямую – через USB кабель.
  • Беспроводное подключение – Bluetooth или Wi-Fi.
  • Сетевое подключение – облачные диски.
  • При помощи программ для обмена файлами.

Синхронизация телефона андроид с компьютером через usb кабель – наиболее простой и доступный способ, не требующий дополнительного оборудования или доступа к интернету. Прямое подключение обеспечивает быструю передачу данных и исключает обрыв соединения.

Какой способ синхронизации телефона с компьютером лучше?

Синхронизация телефона с комьютером по беспроводному методу – удобнее, проще, а зачастую и быстрее, поскольку требуется меньше времени на обнаружение и подключение устройства. Скорость передачи данных не упирается в ограничение USB порта, что иногда позволяет быстрее перемещать данные. При этом иногда происходит прерывание передачи при обрыве сигнала и требуется наличие дополнительного оборудования – Wi-Fi роутер, Bluetooth модуль и т.д.

Андроид синхронизация сетевым способом, не требует физического присутствия возле ПК, как в первых двух способах. А для отправки и получения информации, достаточно соединения с интернетом. При этом необходимо установить подключение с облачным диском, выполняющим роль буфера при обмене данных. Вместимость таких хранилищ, для бесплатного использования, не превышает 15-50 ГБ, а еще имеются ограничения по количеству трафика.

Способ 1: Синхронизация через USB кабель

Для обмена информации понадобится кабель синхронизации. Для улучшения пропускной способности желательно использовать стандартный шнур, а так же разъем USB 2.0 или выше.

  1. В смартфоне/планшете установить тип подключения MTP или USB Mass Storage. Соответствующий параметр содержится в пункте раздела настроек – подключение или память, реже в настройках для разработчиков.
  2. Дождаться определения устройства компьютером и поиска драйверов. В случае неудачи, требуется скачать и установить драйвера для мобильного устройства.
  3. После, требуется открыть «Мой компьютер», далее подключенный диск в категории «Устройствах со съемными носителями», где отобразится внутренняя и внешняя память устройства.

Как видите, с подключением через USB все просто.

Способ 2: Андроид синхронизация с использованием беспроводного подключения

При беспроводном методе обмена информации, лучше использовать FTP подключение. Для этого достаточно наличия домашнего Wi-Fi роутера:

  1. Перед началом работы, необходимо скачать приложение «Диспетчер файлов Moto» или аналог, умеющий автоматически создавать FTP подключение.
  2. В приложении открыть скрытую панель и выбрать пункт «Удаленное управление».
  3. В новом окне выбрать «Подключить», при необходимости настроить логин и пароль для входа.
  4. Приложение создаст FTP подключение и укажет адрес для соединения, необходимый вписать в адресной строке файлового менеджера на ПК. После этого откроется доступ к памяти устройства для обмена информации.

Синхронизация андроид с ПК 1

Синхронизация андроид с ПК 2

Способ 3: Сетевое подключение

Андроид синхронизация с ПК сетевым методом, требует регистрации и подключения облачного диска. Если на устройстве подключен аккаунт Google, тогда регистрация другого хранилище по желанию владельца.

Как синхронизировать андроид на примере Google диска:

Синхронизация андроид с ПК 3

Синхронизация андроид с ПК 4

Способ 4: Программы для обмена данных

Данный метод предполагает установку соответствующей программы на ПК, например MoboRobo или AirDroid. Мы же рассмотрим, как синхронизировать андроид на примере MyPhoneExplorer:

Видео инструкции

Вывод


Предположим, вы уже давно используете Android, а потому может показаться, что он прекрасно справляется с задачами синхронизации времени – будильники срабатывают вовремя, каких-то явных отклонений времени не наблюдается и т. д. Однако уверены ли вы полностью в том, откуда Android на самом деле получает данные о точном времени и часовых поясах? Если у вас есть хоть какие-то сомнения о том, как это работает — добро пожаловать под кат.


В Android существует две проблемы со временем: это его непредсказуемая синхронизация и необходимость в актуализации данных о часовых поясах даже в самой свежей версии ОС.

Предыстория: Android является мобильной ОС, базирующейся на ядре Linux, он спокойно подключается к интернету и, конечно же, можно предположить, что синхронизация времени осуществляется с помощью NTP, однако, это не так. Исторически сложилось, что Android был предназначен для использования исключительно в мобильных телефонах (вспомните версию 1.6). При этом только к 3 мажорной версии он обзавёлся интерфейсом для планшетов и начали́сь другие подвижки к унификации интерфейса и начинки ОС. Однако даже версии 4.4 и Android L получают сигналы точного времени теми же методами, что их получала Nokia 3310 и другие, более ранние GSM/3GPP телефоны, т. е. от вышек сотовой связи при регистрации в сети (при подключении к вышке). При этом планшеты или другие устройства без модуля связи, в принципе не имеют возможности синхронизировать время автоматически.

К великому сожалению, чтобы научить Android синхронизировать время полностью автоматически с помощью NTP нам понадобиться root доступ ибо API для точной установки времени в Android ныне отсутствует.

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

Скриншот окна настроек «Настройки -> Дата и время» версии Android 4.x:


Далее, необходимо установить приложение ClockSync, которое и будет выступать для нас альтернативой демону синхронизации времени с помощью NTP.

Скриншоты окна программы ClockSync до синхронизации (слева) и после (справа):



На скриншотах видно, что разница с точным временем оказалась достаточно маленькой, однако, бывают разные ситуации, у некоторых время на устройстве может даже плавать туда-сюда поскольку оператор не удосужился навести порядок у себя на БС.

Убедившись, что всё работает, настроим автоматическую синхронизацию в программе ClockSync. Для повышения точности я рекомендую включить опции «Режим высокой точности» и «Только через WI-FI». Если с первой опцией всё понятно из описания в программе (см. скриншот ниже), то вторую опцию я рекомендую включить в первую очередь не из соображений экономии мобильного трафика, а из-за того, что мобильный интернет не способен гарантировать хоть сколько-нибудь стабильные задержки.

Всё ещё распространённый мобильный интернет 2-го (GPRS/EDGE) в принципе не в состоянии обеспечить стабильные задержки при передаче. Даже интернет 3-го (3G) и, в некоторой мере, 4-го (LTE/LTE-advanced) поколений при сильной загрузке сети или каналов связи между БС, что является типичной ситуацией для крупных населённых пунктов, не может гарантировать стабильные задержки. Поэтому даже с аппроксимацией конечная точность установки времени может быть хуже долей секунд и даже легко достигать нескольких секунд.

Помимо этого я рекомендую включить опцию «При включении», чтобы лишний раз не выводить устройство из глубокого сна и тем самым сэкономить энергию.

Скриншот настроек автоматической синхронизации в ClockSync:


В связи с масштабными изменениями часовых поясов в РФ осенью этого года необходимо уже сейчас задуматься об актуализации информации о них на всех устройствах и если с поддерживаемыми настольными ОС проблем не возникает, то в Android даже самая свежая версия ОС содержит устаревшие данные. Для того чтобы в этом убедиться устанавливаем TimeZone Fixer и наблюдаем неприглядную картину.

Скриншот программы TimeZone Fixer, запущенной на Android 4.4.4 (прошивка Cyanogenmod от 4 августа 2014), на котором хорошо видно, что данные в прошивке неактуальные:


Немножечко здравого беспокойства и заботы о пользователях:

Автор программы TimeZone Fixer предупреждает нас, что обновление файлов данных о часовых поясах может полностью «сломать» устройство и даже даёт рекомендации о том как обезопасить себя от дополнительных проблем, хоть случаи проблем единичные и очень специфичные — это действительно хорошая забота о простых пользователях.



Только поэтому я и внёс этот кусочек в статью, он хоть и не имеет непосредственного отношения к проблеме, но это действительно хороший пример заботы о пользователях. В то же время предупреждение насчёт версий 4.3+ вызвано лишь малым количеством отзывов о программе для устройств с новыми версиями ОС, поэтому, пожалуйста, после использования обязательно напишите о́тзыв об этом приложении.

После обновления данных о часовых поясах программа предло́жит перезагрузится, однако, я рекомендую перезагрузить устройство самостоятельно через системное меню поскольку программа осуществляет перезагрузку фактически эквивалентную reset, что, пусть и с малой вероятностью, но может привести к проблемам и потери данных.

С удовольствием отвечу на любые вопросы или внесу дополнения, которые сообщество посчитает необходимыми, однако, хочется избежать перегруженности статьи дополнительной информацией, дабы придерживаться формата компактного руководства по решению конкретной проблемы.

UPD: Эта инструкция полностью решает проблему часовых поясов только для версий младше 4.4. С версии 4.4 нужен дополнительный патчинг, пока вопрос находится на стадии исследования возможностей для создания юзер-френдли решения.

Обзор претендентов на «готовое решение» и моя собственная реализация — под катом.

Сначала очерчу желаемый функционал:
1. Чтобы все новые фотографии закачивались в указанную папку.
2. Чтобы можно было сделать на компьютере папку, куда можно будет записывать какие-нибудь файлы, а после синхронизации они окажутся в указанной папке телефона (к примеру, закачивание свежей музыки на телефон).

Теперь можно отправляться на поиски.

Претенденты на «готовое решение»

Dropbox


(Windows, Mac OS, Linux)

К сожалению, Dropbox for Android не поддерживает автоматическую синхронизацию данных. Придется закачивать каждую фотку вручную. Есть надежда на сторонний клиент Droidbox, автор которого обещал ее реализовать, но, во-первых пока что это остается только обещанием, а во-вторых приложение платное. Не подходит.

SugarSync


(Windows, Mac OS)

У идентичного Dropbox'у сервиса под названием SugarSync есть свое приложение под Android. Но если я все-таки смог заметить малюсенькую ссылочку на регистрацию бесплатного аккаунта (который вмещает себя 2 гигабайта), то заставить клиент для телефона соединиться с их сервером у меня не получилось ни по WI-FI, ни по GPRS. К сожалению, по описанию на сайте не очень понятно есть ли функция автоматической синхронизации, так что вопрос остается открытым.

The Missing Sync


(Windows, Mac OS)

Судя по описанию на сайте, это приложение умеет все, что мне надо (и даже больше). Среди заявленных функций синхронизация закладок браузера, контактов, заметок, истории звонков, SMS, автоматическая конвертация и закачка видео, и много еще чего. Но программа не бесплатная и стоит $39.95, что для меня явно дороговато. Кроме того, прогулявшись по зарубежным форумам, я прочитал немало негативных отзывов об этой программе.

DoubleTwist


(Windows, Mac OS)

Программа, которую TechCrunch громко охарактеризовал «iTunes для Android», если верить цитате на сайте. По идее умеет синхронизировать музыку, видео и картинки. Мой телефон она не определила, а в списке среди возможных девайсов из знакомых названий был только Windows Mobile.

Но главная проблема в том, что она соединяется с компьютером по USB-кабелю и работает с ним как с флешкой. С таким подходом можно вообще использовать для синхронизации любую программу для автоматического бекапа данных, наша цель ведь была синхронизация по воздуху. Кроме того автоматически она может работать только в направлении «компьютер → телефон» и не умеет синхронизировать какие-либо другие форматы, кроме вышеуказанных.

Свой способ

Для себя я решил эту проблему таким образом: на телефоне поднимается FTP-сервер, а на компьютере запускается программа, которая автоматически заходит на него и делает все нужные мне манипуляции.

Что надо?


1. SwiFTP — бесплатный простенький FTP-сервер, разрешает настроить имя-пароль для доступа, корневую папку и зону доступности сервера (WI-FI и/или GPRS/3G).

2. WI-FI роутер (в настройках DHCP-сервера сделайте привязку IP к MAC-адресу телефона — это надо чтобы компьютер всегда четко знал по какому айпи ему надо коннектиться к FTP), либо рутованная прошивка и программа Wireless Tether for Root Users, которая делает из телефона точку доступа WI-FI (привет обладателям Nexus One с Froyo на борту, в котором есть нативная поддержка WI-FI tethering!).

3. Программа WinSCP
— FTP-клиент, который имеет функцию синхронизации и поддерживает автоматизацию посредством скриптов.

Что делать?

Сначала устанавливаем SwiFTP, заходим в настройки, указываем логин и пароль по своему желанию, отмечаем чекбокс «Accept connections from WI-FI». Сохраняем. Запускаем сервер кнопкой «Start».



Потом устаналиваем WinSCP, добавляем туда наш FTP-сервер под именем «android» (можно и другое, но не забудьте поменять его название в скрипте ниже).

Теперь самое интересное: скрипт синхронизации. Сразу же дам ссылку на документацию по скриптованию для WinSCP для тех, кто захочет переделать под себя.

Далее в качестве примера будет приведен мой скрипт, вот что он делает:
1. Скачивает в папку photos все фотографии (файлы из папки телефона images), которых еще нету на компьютере
2. Закачивает в папку телефона docs/new файлы из папки компьютера files\new (обычно у меня apk-файлы приложений, текстовые файлы и т.д.)
3. Закачивает в папку телефона music файлы из папки to_music
4. Создает (если еще нету) в папке files на компьютере новую папку с сегодняшней датой и перемещает туда уже закачанные файлы из files\new
5. Удаляет закачанную на телефон музыку с папки компьютера to_music

Создаем файл android_sync.bat, который будем запускать для начала синхронизации.

Создаем файл android_sync.txt, где будет храниться скрипт для WinSCP.

Как использовать?

Теперь можно вынести ярлык на android_sync.bat на рабочий стол. Таким образом, вся синхронизация сводится к нескольким кликам: запуск FTP-сервера, вызов android_sync.bat по ярлыку на рабочем столе, выключение FTP-сервера. Если у вас нет WI-FI роутера, то с запуском-остановкой Wireless Tether становится еще на пару кликов больше. Можно вообще свести количество телодвижений к минимуму, если держать FTP-сервер постоянно включенным и поместить синхронизацию в планировщик задач.

Очевидно, способ с FTP-сервером можно использовать не только под Windows, но выбранный мною клиент WinSCP не кроссплатформенен, а я ни с какими другими ОС достаточно тесно не знаком. Если кто-то в комментариях опишет аналогичный процесс для других ОС, я обязательно его добавлю в топик.

Кроме того, если вы знаете еще какие-то способы организации синхронизации с компьютером смартфона на Android или у вас есть предложения как улучшить приведенный способ — напишите пожалуйста в комментариях.

Читайте также: