Как синхронизировать 2 телефона?

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

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

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

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

Что к чему

Когда мы говорим «синхронизация нескольких устройств», то чаще всего имеем в виду смартфон и планшет, именно эти два устройства пользуются наибольшей популярностью. Однако, кроме них, на рынке существует масса других Android-девайсов, включая умные телевизоры, набравшие популярность китайские HDMI-донглы, а также более экзотические вещи, такие как игровая приставка OUYA и карманная консоль NVIDIA Shield.

Лично у меня имеется в общей сложности шесть различных Android-девайсов, из которых я ежедневно пользуюсь тремя и еще одним как минимум несколько раз в неделю. Это смартфон, планшет, игровая консоль и HDMI-донгл. Устройства, как видно, сильно разнятся по назначению, функциональности, а также установленным версиям Android. Поэтому задача их синхронизации и взаимодействия была довольно нетривиальной, требовалось обеспечить общий доступ всех устройств к файловому хранилищу, синхронизацию приложений между нужными девайсами, сделать из смартфона универсальный пульт управления, а также поднять DLNA-сервер, с которого все устройства могли тянуть мультимедиафайлы.

Данные приложений

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

По причине первого ограничения синхронизация настроек приложений возможна только при наличии прав root на обоих устройствах, по причине второго не обойтись без специализированных инструментов, которые могут исправить проблемы в случае их возникновения. Всего существует два типа инструментов, которые нам подойдут, это приложения для бэкапа типа Titanium Backup и Helium, а также специализированные приложения для синхронизации, вроде DataSync и AppSync. Преимущество первых в асинхронности работы: скопировал настройки сегодня, восстановил на другом девайсе завтра. Преимущество вторых в возможности настройки синхронизации по времени, например каждую ночь.

К счастью, есть инструмент, который сочетает в себе достоинства обоих подходов. DataSync не только умеет копировать настройки приложений и файлы на карте памяти на любой девайс в той же локальной сети, но и позволяет делать бэкап в Dropbox или Box.com, а в качестве дополнения имеет поддержку Bluetooth и NFC, которая пригодится в дороге.

Две очереди в DataSync
Две очереди в DataSync
Другие статьи в выпуске:

Хакер #178. Mesh-сети или строим свой интернет

  • Подписка на «Хакер»

Алгоритм использования DataSync следующий. Устанавливаем приложение на все устройства, которые должны участвовать в синхронизации, запускаем его. Далее на том устройстве, которое должно принять или передать свои настройки другому, выбираем нужные приложения и файлы. Все они будут добавлены в очередь (Queue), получить доступ к которой можно, выдвинув панель снизу. После этого нажимаем на иконку синхронизации сверху (две стрелки) и выбираем нужное устройство из списка. Тап по устройству откроет диалог выбора типа синхронизации: в обе стороны (возможность доступна только в платной версии), туда или сюда. После выбора начнется процесс синхронизации.

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

По принципу своей работы DataSync — это типичный бэкапер. Он берет пакет с приложением, затем копирует все его настройки и файлы и отправляет на удаленное устройство. Поэтому он может быть также использован для: а) собственно бэкапа приложений, б) установки нужных приложений вместе с настройками на новое/перепрошитое устройство с другого устройства и в) для асинхронной синхронизации: одно устройство сохраняет в Dropbox, другое (другие) — восстанавливает.

DataSync: выбираем приложения
DataSync: выбираем приложения

Файлы

Кроме синхронизации приложений, DataSync вполне можно использовать для обмена файлами между девайсами. В случае редких копирований небольших объемов данных (книги, например) его возможностей будет вполне достаточно, а вот если речь идет о постоянных синхронизациях файлов в обе стороны, а также о доступе к большим хранилищам данных (домашний медиаархив), DataSync не подойдет.

После множества экспериментов с разными утилитами синхронизации я пришел к выводу, что наиболее удобны CifsManager, позволяющий подключать SMB-диски к любому каталогу на карте памяти (видим всем приложениям), SSHFSAndroid, подключающий шары по протоколу SSH, и DropSync, который автоматически синхронизирует указанный каталог с диском Dropbox.

Монтирование SMB-шар

Чтобы подключить расшаренную Windows-папку вручную, нужно выполнить такую последовательность команд:

$ insmod /sdcard/ko/dns_resolver.ko$ insmod /sdcard/ko/md4.ko$ insmod /sdcard/ko/cifs.ko$ insmod /sdcard/ko/nls_utf8.ko$ mount -t cifs -o iocharset=utf8,username=юзер,password=пароль,file_mode=0777,dir_mode=0777 //IP/share /sdcard/cifs

INFO

Кроме UPnP/DLNA, XBMC также поддерживает технологию потокового вещания Apple AirPlay: «Настройки -> Службы -> AirPlay -> Разрешить XBMC получать содержимое AirPlay».

В отличие от многих других SMB, SSH и Dropbox-клиентов, которые можно найти в маркете, эти три приложения не ограничивают доступ к шарам только через себя, а вместо этого монтируют их к общедоступным каталогам, так что с данными можно работать из любой программы. CifsManager и SSHFSAndroid удобно использовать для доступа к домашней файлопомойке; подключаем сетевой диск и работаем с файлами, как с локальными (правда, медиасервер их индексировать не будет).

DropSync идеально подходит для синхронизации небольших объемов данных между разными устройствами и ПК: чтобы, например, распространить электронную книгу на все устройства, достаточно скачать ее на ноутбук и положить куда-нибудь в ~/Dropbox/Books, буквально через несколько секунд она появится на всех девайсах с установленным и настроенным DropSync. И никакой зависимости от локальной сети и интернет-соединения как такового (синхронизация произойдет, как только появится доступ к сети).

Теперь о том, как все это настроить. Начнем с CifsManager. Здесь все очень просто и сложно одновременно. С одной стороны, достаточно запустить приложение, нажать кнопку «Add New Share…» и в открывшемся окошке вбить адрес сервера в формате IP/имя-шары, указать имя юзера:пароль и точку монтирования, например /sdcard/cifs, создав каталог заранее. Затем нажимаем по сконфигурированной шаре, и она смонтируется.

Включаем автозагрузку модуля cifs.ko в CifsManager
Включаем автозагрузку модуля cifs.ko в CifsManager

Но это только теория, на практике все несколько сложнее. По сути, CifsManager — это всего лишь оболочка для запуска примерно такой команды:

$ mount -t cifs -o username=юзер,password=пароль,file_mode=0777,dir_mode=0777 //IP/имя-шары /sdcard/cifs

Однако она сработает только в том случае, если в ядро вшит модуль cifs.ko, либо его можно найти по адресу /system/lib/cifs.ko. Если это не так, файловая система подключена не будет, а «не так» это на очень многих смартфонах. Что делать, если модуля нет? Здесь два варианта: либо прошить ядро с поддержкой cifs, либо найти/скомпилировать подходящий для своего ядра модуль.

О том, как выбирать и прошивать ядра, у нас уже была целая статья, поэтому остановимся на втором варианте. В общей сложности, кроме модуля cifs.ko, для новых версий Android нам понадобятся также модули md4.ko, dnsresolver.ko, а также опционально nlsutf8.ko, если в шаре будут файлы с русскими именами. При этом все модули должны быть скомпилированы именно для той версии ядра Linux, которая прошита в девайс. Найти их удастся далеко не для каждого устройства, но попытаться стоит, используя поисковые запросы вроде galaxy s3 cifs.ko. Обычно все необходимые модули запакованы в один zip-архив, который достаточно развернуть и скопировать на карту памяти. Далее заходим в настройки CifsManager, ставим галочку напротив опции Load vid insmod, а в поле Path to cifs.ko перечисляем пути до всех модулей через двоеточие, например: «/sdcard/md4.ko:/sdcard/dnsresolver.ko:/sdcard/nlsutf8.ko:/sdcard/cifs.ko». После этого программа должна начать нормально монтировать шары.

Если же подобные извращения ради возможности получить доступ шаре тебя совсем не радуют, то я хотел бы обратить внимание на SSHFSAndroid, который позволяет монтировать удаленные ФС по протоколу SSH. Фактически это просто обертка вокруг известной файловой системы пространства пользователя sshfs, использующая модуль Linux-ядра FUSE, включенный во все стоковые ядра начиная с Android версии 2.2 (с помощью FUSE в Android происходит монтирование установленных на карту памяти приложений и виртуальных карт памяти).

Пользоваться SSHFSAndroid довольно просто. После запуска главное окно приложения будет пусто, за исключением кнопок «+» и «Настройки» в верхней части окна. Чтобы подключить новую ФС, нажимаем кнопку «+» и последовательно заполняем все поля выведенного на экран меню: Name — произвольное имя, Host — IP или имя хоста (например, 192.168.0.100), Remote path — путь до каталога на удаленной стороне (например, /home/vasya), Mount point — точка монтирования (/sdcard/share), Username — имя юзера и Password — пароль соответственно. Далее нажимаем кнопку «Сохранить» (пиктограмма в виде дискеты) и, вернувшись на главный экран, просто кликаем на пункте с именем соединения. После запроса прав root файловая система будет смонтирована к указанному каталогу, с которым можно работать с помощью любого файлового менеджера.

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

DropSync закончил очередную синхронизацию
DropSync закончил очередную синхронизацию

DropSync очень прост в использовании, надо лишь выбрать каталог для синхронизации, каталог в Dropbox и метод синхронизации: в одну сторону или в обе. После этого софтина повиснет в фоне и будет периодически копировать изменения в файлах на диск Dropbox и обратно. Сразу рекомендую приобрести Pro-версию, в ней реализована поддержка Linux-технологии inotify для моментальной синхронизации сразу после изменения файлов, а также убрано ограничение на размер файла в 5 Мб и на один синхронизируемый каталог.

UPnP/DLNA

Главная проблема всех перечисленных способов обмена файлами в необходимости получения root, настройки и даже установки разных модулей. В XXI веке, когда смартфоны чуть ли не заваривают тебе кофе, это выглядит несколько архаично. Некоторое время назад была придумана технология UPnP (Universal Plug and Play), которая позволяет соединить все доступные «умные» устройства в общую сеть с возможностью доступа к различным функциям. К сожалению, разработчики софта и операционных систем недооценили возможности UPnP, и сегодня технология в основном используется только для обмена и удаленного проигрывания мультимедиафайлов в составе технологии DLNA, которая стала идеологическим наследником и расширением UPnP. Эти две технологии (часто они упоминаются как единый стек технологий) сегодня используются везде, включая разные медиапроигрыватели и телевизоры. В Android поддержки UPnP/DLNA как таковой нет, но ее можно найти в большом количестве мультимедийных приложений, а также специализированном софте, вроде BubbleUPnP и торрент-клиентах.

В своей основе стек UPnP/DLNA базируется на классической клиент-серверной модели взаимодействия, в которой сервер выступает в роли раздатчика мультимедиаконтента, а клиент получает его и проигрывает. Отличие от других технологий только в том, что каждое устройство здесь зачастую носит универсальный характер, выступая в роли как сервера, так и клиента, а также может быть контроллером, который управляет остальными устройствами и позволяет определять, что, где и откуда будет проигрываться (хотя все зависит от реализации, конечно).

Такая архитектура в сочетании с автоматическим объединением устройств в сеть позволяет реализовывать самые разнообразные схемы взаимодействия устройств. В нашем случае мы можем буквально в несколько тапов сделать так, чтобы фильм, хранящийся в памяти планшета, начал проигрываться на HDMI-донгле, используя в качестве пульта управления смартфон. А еще в несколько тапов — чтобы музыка из донгла заиграла на смартфоне.

Интерфейс BubbleUPnP
Интерфейс BubbleUPnP

Есть три основных Android-приложения, поддерживающих UPnP/DLNA. Это VPlayer (через VPlayer uPnP DLNA Plugin), XBMC и BubbleUPnP. Первый позволяет проигрывать контент с DLNA-сервера, второй — раздавать и проигрывать, а третий — это комбайн в стиле «все в одном», который играет, раздает и управляет другими клиентами и серверами. Встроенная поддержка клиентского DLNA есть также в HDMI-донглах на базе чипов Rockchip 3066 и Rockchip 3166 (это практически любой современный донгл).

Включаем поддержку UPnP/DLNA в XBMC
Включаем поддержку UPnP/DLNA в XBMC

В моей домашней конфигурации, включающей в себя TV-приставку OUYA с подключенным жестким диском, а также HDMI-донгл, телефон и планшет, используются следующие приложения: на OUYA, которая, кроме воспроизведения медиаконтента на телевизоре, также отвечает за хранение всех мультимедиаданных, установлен XBMC, в настройках которого включены все режимы работы DLNA (Службы -> UPnP -> Все опции). На телефон и планшет установлены BubbleUPnP, HDMI-стик идет со встроенным клиентом DLNA.

Панель управления воспроизведением в BubbleUPnP
Панель управления воспроизведением в BubbleUPnP

Для того чтобы проиграть тот или иной медиафайл на каком-либо устройстве, теперь достаточно запустить BubbleUPnP, выбрать на вкладке Devices устройство для отображения контента (RENDERERS), в качестве раздатчика контента выбрать XBMC — и все. Далее находишь нужный файл в библиотеке (вкладка «LIBRARY») и тапаешь по нему. В любой момент я могу сменить устройство для отображения или раздачи контента, и воспроизведение продолжится на нем. Никаких настроек, никаких IP-адресов и номеров портов.

Проигрываем локальные файлы на внешнем XBMC-сервере с помощью BubbleUPnP
Проигрываем локальные файлы на внешнем XBMC-сервере с помощью BubbleUPnP

Chromecast

DLNA — прекрасная технология, но она не рассчитана на стриминг потоков из сети Интернет. Другими словами, если мы захотим посмотреть видео в YouTube, придется запускать клиент сайта на самом устройстве, хотя гораздо удобнее было бы выбрать нужное видео на смартфоне, а затем автоматически запустить его на телевизоре.


Поддержка стриминга по протоколу Chromecast есть в приложении YouTube for Google TV. Для активации выбираем в меню пункт Pair with mobile device и следуем инструкциям.

Специально для таких целей Google изобрела аналог Apple AirPlay, названный Chromecast. Официально эта технология поддерживается только одноименным HDMI-донглом производства самой Google, но протокол оказался настолько прост, что очень скоро энтузиасты его разобрали и создали альтернативную реализацию в составе приложения CheapCast.

Теперь, чтобы превратить любой Android-девайс в Chromecast, достаточно установить на него приложение CheapCast из маркета, запустить и нажать кнопку запуска вверху экрана. После этого во всех поддерживающих Chromecast приложениях автоматически появится кнопка в форме прямоугольника с логотипом Wi-Fi в углу. Нажимаем на кнопку, выбираем устройство, и видео проигрывается на нем.

Единственная проблема в том, что в данный момент Chromecast-стриминг поддерживают только YouTube и встроенный медиаплеер, но Google обещала добавить поддержку в PLay Фильмы, Netflix и несколько других. Над возможностью стриминга из любых приложений работал Kush из команды CyanogenMod, однако Google быстро завернула эту разработку, отключив возможность стриминга любым сторонним приложениям.

CheapCast на OUYA
CheapCast на OUYA

Пульт/джойстик

Для управления разными TV-приставками, HDMI-стиками и в некоторых случаях планшетом понадобится «удаленный» пульт. Я не предлагаю покупать специальные Bluetooth-пульты или оборудовать девайсы инфракрасными приемниками, вместо этого превратим в пульт смартфон. Из всего многообразия приложений-пультов, которые можно найти в Google Play, единственный достойный вариант — это DroidMote. Клиент у него бесплатный, однако за сервер для Android-устройства придется заплатить 80 рублей.

RKRemoteControl: официальный пульт управления для HDMI-стиков на базе чипов RK3066 и RK3166
RKRemoteControl: официальный пульт управления для HDMI-стиков на базе чипов RK3066 и RK3166

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


SSHFSAndroid не работает в Android 4.2, однако автор обещает исправить проблему в ближайшее время.

Функциональность сервера доступна только в платной версии BubbleUPnP, стоимостью 140 рублей.

Для расшаривания карты памяти любого гаджета можно использовать приложение SambaDroid. Оно не требует настройки и запускает Samba-сервер автоматически после старта приложения.

Выводы

Объединение гаджетов в одну слаженно работающую сеть — непростая задача, и описанные в данной статье приемы не идеальны и подойдут не всем. Однако пока у нас нет других инструментов, и приходится только ждать, когда сама Google или разработчики CyanogenMod добавят такие возможности в Android. В том, что это произойдет, я уверен на 100%, вопрос только когда.

image
При разработке многих Android-приложений требуется организовать процесс синхронизации данных с данными на сервере. Есть два основных способа как данную синхронизацию можно реализовать.
Первый способ — классический (наиболее популярный и наиболее простой) — с помощью AlarmManager и Service. Например, как описано в этой статье.
Второй способ — «правильный» (но пока что, видимо, редко кем используемый) — с помощью SyncAdapter.
Разрабатывая своё приложение, изначально я попытался реализовать «правильный» (т.е. второй способ).
О том, как его реализовать — чуть ниже. Расскажу сначала о том, с какими сложностями и особенностями я столкнулся при его реализации.

Особенности реализации синхронизации с помощью SyncAdapter

Прежде всего — данный метод достаточно плохо описан в документации. Хотя на сайте разработчиков Android и есть пример реализации, более хорошим примером (с пояснениями) будет статья по этой .
Для работы данного способа синхронизации необходимо создание отдельного типа эккаунта специально для Вашего предложения (если существующие эккаунты, например, эккаунты Google не подходят), а это — тема для отдельной статьи (пример можно посмотреть, например, ).
Данный эккаунт будет доступен в разделе Settings / Accounts & Sync. Создание (и удаление) эккаунта будет возможным не только из Вашего приложения, но и из этого раздела. В нем можно создать несколько эккаунтов для Вашего приложения (нужно ли это Вашему приложению?). Для каждого эккаунта нужно имя (для OAuth-эккаунтов приходится использовать выдуманные имена).
При этом неправильно написанный код эккаунта перезагружает как устройство, так и эмулятор — тестировать сложно. При этом, если Вы создали лишь код, отвечающий за эккаунт, и хотите его протестировать, то не выйдет — без полностью написанного кода SyncAdapter’a устройство будет перезагружаться при входе в Accounts & Sync.
Как быть если Вашему процессу синхронизации не нужен эккаунт? Придется создавать dummy-эккаунт.
Если Ваше приложение будет синхронизировать данные с существующими базами — контактами телефона, событиями календаря или, например, фотографиями, то тут все проще (и большинство примеров в сети именно про такой тип синхронизации). Если же синхронизация будет производиться со своими данными, то необходимо, чтоб был создан свой ContentProvider.
Как быть, если Ваше приложение не хочет делиться своей базой с другими приложениями? Придется создавать dummy-ContentProvider, например, такой.
Если все сделано, и даже свой SyncAdapter написан (см. ниже как), то теперь синхронизация будет автоматически запускаться когда изменились данные в локальной базе.
Если синхронизацию нужно запустить вручную, то для этого есть функция requestSync(), ниже будет написано об ограничениях функции. Если нужно запускать синхронизацию автоматически, то для этого есть другая функция — addPeriodicSync(). Хотя работает она лишь на Android 2.2 или выше. Но работает данная функция отлично — например, если в момент синхронизации нет интернет-соединения, то синхронизация произойдет автоматически в тот момент, когда оно появится.

Как реализовать синхронизацию с помощью SyncAdapter’а

Что же требуется сделать для реализации синхронизации с помощью SyncAdapter? (перевод ответа c StackOverflow)

1. Уведомить Android, что приложение поддерживает синхронизацию

Для этого в AndroidManifest.xml необходимо указать сервис синхронизации:

<service android:name=".sync.mySyncService" android:exported="true"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/sync_myapp" /> </service>

где name — имя, соответствующее имени класса для синхронизации (об этом — чуть ниже); exported — делает сервис доступным другим компонентам (в т.ч. и ContentResolver, который используется для взаимодействия с сервисом синхронизации); intent-filter позволяет перехватывать событие, требующее синхронизацию (возникает, например, когда синхронизация запрошена функцией RequestSync() Вашего ContentResolver’a).

2. Создать сервис (службу) для нахождения SyncAdapter’a

Например:

public class mySyncService extends Service { private static mySyncAdapter mSyncAdapter = null; public SyncService() { super(); } @Override public void onCreate() { super.onCreate(); if (mSyncAdapter == null) { mSyncAdapter = new mySyncAdapter(getApplicationContext(), true); } } @Override public IBinder onBind(Intent arg0) { return mSyncAdapter.getSyncAdapterBinder(); }}

Ваш класс должен расширять Service, в нем должна быть переменная экземпляра AbstractThreadedSyncAdapter. Он должен реализовывать public IBinder onBind(Intent) и должен возвращать SyncAdapterBinder.
Достаточно многое должно быть реализовано в этом классе, т.к. данный сервис предоставляет стандартный интерфейс для SyncAdapter Android’a.

3. Создать класс SyncAdapter для непосредственного осуществления синхронизации

mySyncAdapter — место, где содержится сама логика синхронизации. Когда приходит время синхронизации, вызывается onPerformSync().

4. Осуществить связывание (binding) между типом эккаунта и Content Authority

В пункте 1, в файле AndroidManifest.xml, в поле name мы указали значение, которую и образует связь между ContentAuthority и эккаунтом. AndroidManifest.xml ссылается на другой xml-файл. В нашем примере это sync_myapp.xml:

<?xml version="1.0" encoding="utf-8" ?> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:contentAuthority="com.android.contacts" android:accountType="com.google" android:userVisible="true" /> 

Данный файл сообщает Android’у, что созданный нами SyncAdapter будет синхронизировать контакты.
Все значения строк в contentAuthority должны совпадать со значениями того, с чем будет происходить синхронизация. Если синхронизация будет происходить с Вашей собственной базой, то с Вашим значением. Если с какими-либо существующими базами (например, с контактами или событиями календаря), то со стандартными значениями. Например, указанное выше значение «com.android.contacts» идентифицирует стандартные контакты.
Значение accountType также должно совпадать либо с Вашим значением, либо со стандартным значением. Если Вы создаете свой собственный тип эккаунта, то Вам потребуется создать и подкласс AccountAuthenticator, чтобы осуществлять авторизацию на Вашем сервере (см. уже указанную выше статью). Указанное в нашем примере значение «com.google» идентифицирует, что мы используем Google-эккаунт.

5. Включение синхронизации для созданной пары Account-ContentAuthority

Наконец, можно включить процесс синхронизации. Это можно сделать либо в разделе Settings / Accounts & Sync, либо программно в Вашем приложении:

ContentResolver.setSyncAutomatically(account, AUTHORITY, true);

Для осуществления синхронизации она должна быть разрешена не только для Вашего приложения — необходимо глобальное разрешение на синхронизацию (в разделе Settings / Accounts & Sync должна быть проставлена соответствующая галка).
Если одно из этих условий не выполнено, то вызов RequestSync() ни к чему немедленно не приведет, запрошенная синхронизация однако будет выполнена позднее — как только синхронизация будет включена. Хотя, существует способ это обойти.
Дополнительно, можно включить периодические автоматические синхронизации.

И так, чем же хороша (+) и плоха (-) синхронизация с помощью SyncAdapter по сравнению с ASyncTask?
(+) следование стандартам (Ваше приложение в списке всех синхронизирующихся приложений)
(+) поддержка нескольких эккаунтов
(+) простота реализации автоматических синхронизаций (когда остальное все уже написано)
(+) автоматическая синхронизация при появлении интернет-соединения
(+) удобство в синхронизации со стандартными базами (контакты, календарь и т.п.)
(-) необходимость создания эккаунта
(-) отсутствие полноценной документации
(-) сложность реализации и тестирования
(-) необходимость в Android 2.2 и выше для автоматических периодических синхронизаций
(-) необходимость создания своего ContentProvider’a
Итого, я выбрал ASyncTask для синхронизации в своем приложении (хотя код для SyncAdapter был уже почти полностью написан) — прежде всего, не хотелось ограничиваться версией 2.2 Android.

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

Что такое синхронизация в телефоне

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

Второй вариант определения синхронизации — использование одинаковой информации на разных гаджетах, между которыми есть связь.

Третий вариант определения — это обмен данными без потерь между аппаратом и учетной записью.

Зачем нужна синхронизация в телефоне

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

  1. Резервное копирование. Копии в облаке создаются за счет синхронизации устройства с сервером в интернете. Благодаря резервным копиям человек сможет быстро восстановить нужную информацию;

  2. Доступ к материалам из интернета. Например, вы синхронизировали список контактов из телефона и теперь можете посмотреть его в Google Contacts;

  3. Работа через несколько устройств. Удобно тем, кто пользуется несколькими аппаратами. Достаточно их синхронизировать, и вся информация будет доступна на каждом устройстве.

Как работает синхронизация

Синхронизация происходит так:

  • Создается и настраивается аккаунт, где он будет хранить данные. Для андроид-смартфонов это обычно Google-аккаунт. С ним не нужно использовать сторонние приложения;

  • Запускается синхронизация. Выбранные пользователем данные сохраняются на сервисе и хранятся там под защитой;

  • Другое устройство подключается и синхронизируется с сервисом. Вся информация, которая есть в облаке, переходит на этот гаджет;

  • Выгруженные данные появляются на подключенном к аккаунту аппарате.

Какие данные можно синхронизировать

Синхронизации подлежит разная пользовательская информация:

  • заметки и напоминания;

  • настройки ОС и приложений;

  • фотографии и аудиофайлы;

  • список контактов;

  • данные с веб-страниц — закладки, логины и пароли;

  • документы и папки.

Типы синхронизации

Синхронизацию можно поделить на два типа: односторонний запуск и двусторонний обмен.

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

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

Как включить и настроить синхронизацию на телефоне

Нужно проделать ряд действий:

  • Открыть настройки смартфона и перейти в меню «Аккаунт”;

  • Выбрать сервер для работы. В андроидах это по умолчанию Google-аккаунт;

  • Создайте учетную запись, если у вас ее нет. Если есть — войдите в нее;
  • Отметьте в настройках пункты, которые нужно синхронизировать в дальнейшем;

  • Нажмите кнопку «Синхронизировать”. Если ее нет — копирование начнется автоматически, как только пользователь подключится к интернету;
  • Дождитесь окончания копирования;

  • Синхронизация завершена, вы можете восстанавливать данные на других аппаратах.

Можно настроить автоматическое сохранение. Тогда не придется каждый раз делать копирование вручную.

Нужно помнить, что для синхронизации нужен интернет, без него копирование не произойдет. Неважно, какая будет связь — Wi-Fi или мобильная сеть.

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

Лайк — лучшее спасибо! 🙂

​ ​ ​

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

В таком случае встает вопрос синхронизации настроек и данных приложений между разными устройствами. Во многих программах, особенно завязанных на интернет, это реализовано с помощью создания единого онлайнового аккаунта. Однако, если вы захотите, например, продолжить игру в Angry Birds на планшете именно с того места, где вы остановились на телефоне, то ничего у вас не получится. Если, конечно, вы не используете программу DataSync (требуются права суперпользователя).

синхронизировать приложение

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

Подключение своего аккаунта в Dropbox

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

Settings-Menu Dropbox-Confirmation

Выбор приложений

Теперь откройте в DataSync экран Applications и вы увидите список всех программ, установленных на этом устройстве. Отметьте те приложения, состояние которых вы хотите синхронизировать с другим гаджетом.

Applications-List Sync-With

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

Укажите метод синхронизации

Перед вами появится еще один экран, предлагающий выбрать метод синхронизации. Нажмите на иконку с логотипом Dropbox, а затем выберите одну из трех опций — Automatic Two-way, Upload или Download.

Sync-Direction Successful-Sync

Так как это ваше первое устройство, то необходимо выбрать вариант Upload для загрузки данных в ваш Dropbox. Синхронизация начнется немедленно и об ее окончании вы узнаете на специальном экране.

Подключение других устройств

Повторите предыдущие пункты для другого имеющегося у вас гаджета под управлением Android. В третьем пункте этого руководства выберите опцию Download и состояние нужной вам программы будет синхронизировано. В дальнейшем на обоих устройствах можно активизировать опцию Automatic Two-way для автоматической синхронизации данных.

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

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

Для чего нужна синхронизация на Андроид?

Раньше невозможно было представить полноценное использование телефона без его регулярного подключения к ПК. Только таким образом на него загружались новые мелодии и картинки. Лишь через USB-кабель передавались фотографии, созданные при помощи встроенной камеры. Также подключение к компьютеру требовалось для обновления прошивки — это касалось не только смартфонов, но и некоторых кнопочных аппаратов. А ещё весьма полезной функцией была синхронизация контактов — только при помощи компьютера можно было перенести телефонную книгу со старого устройства на новое.

Что же изменилось сейчас? Пожалуй, практически всё. Аккаунт Google позволяет забыть о компьютере. Контакты, SMS и многие другие данные сохраняются в «облаке», в связи с чем их перенос на ПК рекомендован только тем людям, которые пекутся о безопасности. Равно как давно компьютер не требуется для того, чтобы закачать на Android музыку и изображения. Сейчас это можно сделать при помощи браузера и каких-то сторонних приложений. А обновление операционной системы происходит по воздуху.

И всё же иногда нужно включить синхронизацию на Андроид. Она может понадобиться для того, чтобы перекинуть на смартфон какой-нибудь фильм, вес которого превышает 6-7 Гб. Также синхронизация может потребоваться в случае возникновения каких-то неполадок. И уж точно без неё не обойтись в том случае, если вы собираетесь получить root-доступ или установить альтернативную прошивку. Ещё регулярная синхронизация нужна тем людям, которые используют свой ПК в качестве файлового хранилища. Словом, статья о том, как синхронизировать Андроид с компьютером, может оказаться для вас весьма полезной.

Каким образом осуществляется синхронизация?

Современный смартфон можно синхронизировать с компьютером при помощи трех распространенных технологий:

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

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

Использование MyPhoneExplorer

По умолчанию операционные системы Android и Windows практически никак не взаимодействуют. Если вы подключите смартфон к ПК при помощи кабеля, то получите лишь доступ к файловой системе. В большинстве случаев пользователь попросту не понимает, что с этим доступом делать — его умений хватает лишь на то, чтобы перекинуть музыку в папку Sounds или Music. Вот почему следует озаботиться установкой какого-нибудь специализированного приложения. Например, в его качестве может выступить MyPhoneExplorer — вам нужно установить его не только на смартфон, но и на компьютер (для этого существует отдельная версия). После установки следуйте нашему руководству:

Шаг 1. Запустите программу на компьютере.

Шаг 2. Запустите приложение MyPhoneExplorer на смартфоне.

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

Внимание: всяческие китайские USB-шнуры могут не уметь передавать что-то кроме электроэнергии. Поэтому воспользуйтесь качественным кабелем. Идеальный вариант — провод, продававшийся в комплекте со смартфоном.

Шаг 4. Вернитесь к компьютерной программе. В ней нажмите кнопку «Обновить».

Шаг 5. Выберите тип подключения и нажмите кнопку «OK». В нашем случае это USB-кабель.

Шаг 6. Программа предупредит вас о том, что на устройстве должна быть включена USB-отладка. Если ранее вы не включали этот режим, то воспользуйтесь предложенной во всплывающем окне инструкцией. Если же все требования выполнены, то нажмите кнопку «Далее».

Шаг 7. После определения подключенного смартфона потребуется ввод его имени и нажатие кнопки «OK».

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

При помощи MyPhoneExplorer вы можете не только передавать и принимать различные файлы, но и следить за состоянием устройства. Именно для этого требовалась установка мобильного клиента. В режиме реального времени вы будете видеть нагрузку на центральный процессор, уровень сигнала, заряд и температуру аккумулятора, а также некоторую другую информацию. Также вы можете включить отображение уведомлений на рабочем столе. Это очень удобно, когда вы подключаете аппарат к компьютеру через USB только ради его подзарядки.

Использование File Sync

Ещё одна неплохая программа для синхронизации Андроид с ПК — это File Sync. Она в первую очередь предназначена для осуществления этого процесса при помощи Wi-Fi. Здесь тоже требуется скачивание и установка не только компьютерной программы, но и мобильного клиента. После установки запустите обе эти версии и следуйте нашей инструкции:

Шаг 1. Нажмите на кнопку «Sync Jobs».

Шаг 2. Выберите ту домашнюю сеть, в которой находятся ваши смартфон и ПК.

Шаг 3. В следующем меню нажмите на кнопку «Create Job».

Шаг 4. Наделите синхронизацию любым именем, после чего выберите из списка направление передачи данных. Информация может передаваться с компьютера на смартфон, со смартфона на компьютер или в обоих направлениях. Когда определитесь со своим выбором — нажмите на кнопку «Create».

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

Шаг 6. Что касается компьютерной программы, то при первом запуске она предложит ввести настройки домашней сети, к которой подключены и ПК, и смартфон. Здесь следует нажать кнопку «Save». После этого о существовании утилиты можно вспоминать только в том случае, если вы решили сменить роутер или настройки раздающегося Wi-Fi.

Использование Airdroid

Если вы желаете получить с компьютера доступ к вашему смартфону, то можно обойтись и без дополнительных утилит. Достаточно установить на телефон Airdroid, тогда как на ПК в таком случае достаточно любого интернет-браузера.

Шаг 1. Установите и запустите Airdroid.

Шаг 2. Синхронизация должна запуститься автоматически. Если этого не произошло, то следует нажать на соответствующую кнопку.

Шаг 3. В верхней части приложения вы увидите два адреса. Именно по ним следует перейти на компьютере. Первый используется в том случае, если вы зарегистрировались на официальном сайте Airdroid. Второй адрес состоит из цифр, точек и двоеточия — его использовать будут те, кому не хочется тратить время на регистрацию.

Шаг 4. Как только вы попытаетесь перейти по указанному адресу, на устройство придет запрос об осуществлении синхронизации. Вам нужно нажать на кнопку «Принять». На это вам отводятся 30 секунд.

Шаг 5. После вашего подтверждения в интернет-браузере вы увидите красивую страничку. С её помощью вы можете передавать файлы, слушать музыку, смотреть видео — словом, полностью управлять файловой системой смартфона. Здесь же присутствуют телефонная книга, журнал вызовов и многое другое. Весьма полезной возможностью является съемка скриншотов. Все поступающие уведомления тоже будут отображаться в браузере, что очень удобно при напряженной работе и невозможности регулярно отрывать взгляд от монитора.

Создание FTP-сервера

Если вам знакома аббревиатура FTP, то вы можете создать на смартфоне именно такой сервер. В результате вы сможете свободно распоряжаться файлами, расположенными на телефоне, используя для этих целей любое подходящее приложение. Например, к FTP-серверам умеет подключаться очень популярный файловый менеджер Total Commander. Остается понять, как создать FTP-сервер на смартфоне. А делается это очень просто. Достаточно скачать и установить на него приложение FTP Server и следовать инструкции:

Шаг 1. Запустите утилиту.

Шаг 2. Нажмите на красную клавишу, служащую для запуска сервера. В результате она должна окраситься в зеленый цвет.

Шаг 3. Используйте на компьютере подходящий для вас клиент. Адрес для подключения вместе с логином и паролем будут указаны на экране смартфона.

Шаг 4. Если вы желаете изменить домашнюю директорию, то сделать это можно в настройках приложения.

Шаг 5. Когда FTP-сервер перестанет быть нужным — нажмите на зеленую кнопку, после чего она должна окраситься в красный цвет.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *