- Синхронизация нескольких устройств на платформе Android
- Синхронизация устройств Android друг с другом
- Способ 1: Сервисы Google
- Способ 2: Dropsync
- Особенности синхронизации в Android-приложении
- Особенности реализации синхронизации с помощью SyncAdapter
- Как реализовать синхронизацию с помощью SyncAdapter‘а
- Выводы
Синхронизация нескольких устройств на платформе Android
На сегодняшний день мобильные телефоны и планшеты на платформе Android являются наиболее используемыми устройствами, в том числе и одновременно. Из-за этого часто возникает необходимость организовать синхронизацию данных между двумя девайсами в режиме реального времени. В ходе настоящей инструкции мы расскажем о методах реализации подобной задачи.
Синхронизация устройств Android друг с другом
Нами будет уделено внимание процессу синхронизации преимущественно в автоматическом режиме, требуя минимального вмешательства. Если же вас интересует тема переноса данных с одного устройства на другое без постоянного обмена ими, ознакомьтесь с другой статьей.
Способ 1: Сервисы Google
По умолчанию для использования всех возможностей платформы Android на любом девайсе требуется произвести авторизацию с использованием учетной записи Гугл. Именно за счет единого аккаунта можно синхронизировать практически любые личные данные. Если вы еще не успели авторизоваться, сделайте это по нашей инструкции.
После подключения учетной записи обязательно посетите раздел «Аккаунты» в настройках устройства, выбрав «Google». Здесь нужно открыть меню с тремя точками в правом верхнем углу и воспользоваться пунктом «Синхронизировать». В результате отмеченные на той же странице данные обновятся в соответствии с информацией на сервере.
В «Настройках» любого смартфона на Андроид предусмотрена функция резервного копирования данных о работе установленных приложений. При активации этой возможности все сведения о параметрах ПО будут автоматически сохраняться в облаке. Недостатком здесь выступает отсутствие синхронизации непосредственно самих приложений.
Для включения функции зайдите в «Настройки» и найдите пункт «Восстановление и сброс». Нажмите по переключателю «Автовосстановление», и на этом процедура завершена. Учтите, что как и любые другие виды синхронизации, передача данных требует действующее соединение с интернетом.
Контакты
Телефонная книга на смартфоне является одним из наиболее важных приложений, синхронизировать которое с облаком можно не только для личного удобства, но и безопасности на случай выхода устройства из строя. И хотя перенос контактов выполняется в ранее упомянутом разделе, также есть несколько других нюансов. О процедуре работы с контактами и синхронизации мы рассказали в отдельной статье.
Google Фото
Если на устройстве находится много изображений или вы часто фотографируете, но не всегда используете такие приложения, как Instagram, можно воспользоваться сервисом Google Фото. С его помощью после подключения аккаунта Гугл все снимки на смартфоне будут синхронизироваться с облаком и станут доступны на всех девайсах, где используется этот сервис и ваша учетная запись.
Произвести настройку синхронизации можно при первом запуске приложения, и в будущем не потребуются какие-либо корректировки. Однако, несмотря на это, изменить работу автозагрузки все же можно во внутренних параметрах приложения в разделе «Автозагрузка и синхронизация».
Синхронизация приложений
Этот вариант синхронизации нельзя назвать автоматическим, но упомянуть его все же важно. Стандартное и, наверное, самое используемое приложение Google Play запоминает список установленного ПО вне зависимости от версии Андроид и модели устройства. Таким образом, используя одну учетную запись на нескольких девайсах, можно всегда узнать какие приложения были недавно установлены и по необходимости произвести повторную инсталляцию. В сочетании с резервным копированием можно организовать перенос данных с минимальными потерями.
Для просмотра списка откройте Google Play Маркет, разверните главное меню и выберите пункт «Мои приложения и игры». С помощью верхней панели перейдите на вкладку «Библиотека». Именно здесь находится информация об установленном ПО. Историю можно очистить или восстановить любое приложение кнопкой «Установить».
Мы постарались рассказать обо всех наиболее удобных вариантах синхронизации двух девайсов на платформе Android с использованием учетной записи Гугл. Иногда некоторые функции могут быть недоступны или, наоборот, расширены из-за версии прошивки.
Способ 2: Dropsync
В отличие от сервисов Google, где основной возможностью является синхронизация данных о работе, приложение Dropsync позволяет организовать полноценный обмен файлами между двумя девайсами посредством облачного хранилища Dropbox. Как не трудно догадаться, вам придется завести учетную запись на этом ресурсе и по возможности приобрести дополнительное дисковое пространство.
Примечание: Похожие программы есть и для других облачных сервисов, но именно здесь синхронизация реализована лучше всего.
- Загрузите и откройте приложение по выше представленной ссылке. На стартовой странице нажмите кнопку «Подключение к Dropbox аккаунту».
После этого вы будете перенаправлены в браузер по умолчанию или к авторизации через приложение Dropbox. Вне зависимости от варианта произведите авторизацию, предоставив Dropsync разрешение на управление файлами на устройстве.
После успешной авторизации произойдет перенаправление обратно в приложение и, когда появится подпись «Dropbox аккаунт подключен», нажмите кнопку «Мастер создания синхронизации».
Дальше тапните по ссылке «Создать свою синхронизацию». В соответствии со встроенной справкой можете опробовать приложение с помощью тестовой синхронизации, но мы эту процедуру рассматривать не будем, переходя сразу к настройкам файлов.
Нажмите по блоку «Папка в Dropbox», чтобы перейти к каталогу файлов в облаке. Обратите внимание, в дальнейшем также нужно будет воспользоваться пунктом «Локальная папка».
В первом случае будет представлен список директорий, когда-либо созданных в облаке. По необходимости можете добавить и выбрать новую папку.
При использовании пункта «Локальная папка» откроется корневой каталог смартфона, где вам нужно выбрать директорию для синхронизации. Учтите, все данные, находящиеся в выбранной папке, будут сразу переданы на сервер Dropbox.
Вернувшись на страницу «Параметры», измените «Метод синхронизации» на «Двусторонний» и, если нужно, отметьте галочками дополнительные параметры. Переход нажатием кнопки «Сохранить» обязательно убедитесь, что переключатель «Включить синхронизацию» находится в активированном состоянии.
Теперь начнется первичная синхронизация данных и будет повторяться каждые несколько минут, проверяя состояние файлов в облаке и в папке на девайсе.
Поместив или удалив какие-либо файлы в выбранную директорию, они будут загружены в облако. Если же Dropsync обнаружит несовпадение в документах, из хранилища они также удалятся.
Подводя итог, можно с уверенностью сказать, что для наиболее эффективной синхронизации лучше всего использовать оба варианта сразу. Каждый из них не требует ручного управления и отлично справляется с возложенной задачей.
Помимо этой статьи, на сайте еще 12473 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Источник
Особенности синхронизации в Android-приложении
При разработке многих 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 необходимо указать сервис синхронизации:
где name — имя, соответствующее имени класса для синхронизации (об этом — чуть ниже); exported — делает сервис доступным другим компонентам (в т.ч. и ContentResolver, который используется для взаимодействия с сервисом синхронизации); intent-filter позволяет перехватывать событие, требующее синхронизацию (возникает, например, когда синхронизация запрошена функцией RequestSync() Вашего ContentResolver‘a).
2. Создать сервис (службу) для нахождения SyncAdapter‘a
Ваш класс должен расширять 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:
Данный файл сообщает Android’у, что созданный нами SyncAdapter будет синхронизировать контакты.
Все значения строк в contentAuthority должны совпадать со значениями того, с чем будет происходить синхронизация. Если синхронизация будет происходить с Вашей собственной базой, то с Вашим значением. Если с какими-либо существующими базами (например, с контактами или событиями календаря), то со стандартными значениями. Например, указанное выше значение «com.android.contacts» идентифицирует стандартные контакты.
Значение accountType также должно совпадать либо с Вашим значением, либо со стандартным значением. Если Вы создаете свой собственный тип эккаунта, то Вам потребуется создать и подкласс AccountAuthenticator, чтобы осуществлять авторизацию на Вашем сервере (см. уже указанную выше статью). Указанное в нашем примере значение «com.google» идентифицирует, что мы используем Google-эккаунт.
5. Включение синхронизации для созданной пары Account—ContentAuthority
Наконец, можно включить процесс синхронизации. Это можно сделать либо в разделе Settings / Accounts & Sync, либо программно в Вашем приложении:
Для осуществления синхронизации она должна быть разрешена не только для Вашего приложения — необходимо глобальное разрешение на синхронизацию (в разделе Settings / Accounts & Sync должна быть проставлена соответствующая галка).
Если одно из этих условий не выполнено, то вызов RequestSync() ни к чему немедленно не приведет, запрошенная синхронизация однако будет выполнена позднее — как только синхронизация будет включена. Хотя, существует способ это обойти.
Дополнительно, можно включить периодические автоматические синхронизации.
Выводы
И так, чем же хороша (+) и плоха (-) синхронизация с помощью SyncAdapter по сравнению с ASyncTask?
(+) следование стандартам (Ваше приложение в списке всех синхронизирующихся приложений)
(+) поддержка нескольких эккаунтов
(+) простота реализации автоматических синхронизаций (когда остальное все уже написано)
(+) автоматическая синхронизация при появлении интернет-соединения
(+) удобство в синхронизации со стандартными базами (контакты, календарь и т.п.)
(-) необходимость создания эккаунта
(-) отсутствие полноценной документации
(-) сложность реализации и тестирования
(-) необходимость в Android 2.2 и выше для автоматических периодических синхронизаций
(-) необходимость создания своего ContentProvider’a
Итого, я выбрал ASyncTask для синхронизации в своем приложении (хотя код для SyncAdapter был уже почти полностью написан) — прежде всего, не хотелось ограничиваться версией 2.2 Android.
Источник