Biokaminy-lux.ru

Все про ремонт быт. техники
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Разработка под Android: Особенности синхронизации в android-приложении

Разработка под Android: Особенности синхронизации в android-приложении

image

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

Разрабатывая своё приложение, изначально я попытался реализовать «правильный» (т.е. второй способ).

О том, как его реализовать — чуть ниже. Расскажу сначала о том, с какими сложностями и особенностями я столкнулся при его реализации.

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

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

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

Если Ваше приложение будет синхронизировать данные с существующими базами — контактами телефона, событиями календаря или, например, фотографиями, то тут все проще (и большинство примеров в сети именно про такой тип синхронизации). Если же синхронизация будет производиться со своими данными, то необходимо, чтоб был создан свой ContentProvider.
Как быть, если Ваше приложение не хочет делиться своей базой с другими приложениями? Придется создавать dummy-ContentProvider, например, такой.

Читайте так же:
Установка android в мультимедиа систему volvo

Если все сделано, и даже свой 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. Включение синхронизации для созданной пары AccountContentAuthority

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

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

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

Выводы

И так, чем же хороша (+) и плоха (-) синхронизация с помощью SyncAdapter по сравнению с ASyncTask?

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

Итого, я выбрал ASyncTask для синхронизации в своем приложении (хотя код для SyncAdapter был уже почти полностью написан) — прежде всего, не хотелось ограничиваться версией 2.2 Android.

Аккаунт Google

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

Читайте так же:
Синхронизация windows mobile и телефонов

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

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

Google Family Link. Как установить и использовать по назначению

Google Family Link появилось недавно, но уже стало предустановленным приложением начиная с Android 10. Однако дополнительная установка приложения всё равно потребуется, хотя управлять им можно напрямую из меню настроек вашего телефона.

С этим приложением вы получаете обширный перечень опций, связанных с контролем действий ребёнка на смартфоне. Из этого руководства вы узнаете, как настроить Google Family Link и как использовать различные функции приложения.

Установка Google Family Link

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

  • У вашего ребёнка должен быть аккаунт Google, чтобы использовать Google Family Link создайте отдельный аккаунт для вашего ребёнка;
  • Аккаунт должен быть частью Семейной библиотеки Google. Лучше подключить его до того, как начинать работу с Google Family Link;
  • Аккаунт должен быть единственным существующим на устройстве ребёнка, так как при установке Google Family Link сотрёт все остальные.

Ниже представлен пошаговый процесс установки следующий за основными требованиями, указанными выше. Поскольку для этого требуется ввод на двух разных устройствах, мы укажем, какое устройство требуется для каждого шага. Если там написано «Родительское устройство», вы делаете это на своём телефоне, где указано «Детское устройство» — делаете на нём.

  • Для обоих устройств. Загрузите приложение Google Family Link для родителей на устройство родителя и Google Family Link для детей на устройство ребёнка. Важно заметить, что это два абсолютно разных приложения.
  • На родительском устройстве откройте приложение Google Family Link, нажмите далее и выберите ваш Google аккаунт. Далее выберите аккаунт вашего ребёнка как аккаунт, который вы хотите контролировать. Затем приложение попросит вас взять телефон ребёнка: на нём нажмите кнопку «Далее» чтобы получить код подключения.
  • На устройстве ребёнка откройте приложение Google Family Link и выберите опцию «Это устройство», далее выберите Google аккаунт ребёнка.
  • На обоих устройствах. Устройство ребёнка запросит код соединения с Родительского устройства, введите код соединения с родительского устройства в устройство ребёнка.
  • На устройстве ребёнка проверьте почту ребёнка, если потребуется верификация.
Читайте так же:
Как синхронизировать игру ios и андроид

Далее возможны два варианта событий. Если вы включили Google аккаунт ребёнка в семейную библиотеку прежде, чем начинать установку Google Family Link, то вы сможете продолжить настройку приложения. Если же нет, то приложение попросит вас это сделать для осуществления дальнейших действий.

  • На устройстве родителя нажимайте «Далее» пока приложение не предложит вам продолжить настройку на устройстве ребёнка;
  • На устройстве ребёнка приложение будет спрашивать вас давать множество разрешений, нажимайте «Далее» чтобы подтвердить все из них.
  • На устройстве ребёнка. Дайте название устройству вашего ребёнка когда потребуется. Далее Google Family Link спросит вас какими приложениями вы позволяете пользоваться ребёнку: принимайте или отклоняйте их, нажимайте «Далее».

Вот и всё! Теперь вы подключены через Google Family Link. Далее вы можете продолжать работу с приложением со своего устройства, настраивать и пользоваться всеми предложенными опциями.

Дальнейшая настройка и использование

Теперь, когда вы справились с трудной задачей подключения Family Link, давайте попробуем использовать приложением по полной. С этого момента все действия происходят на родительском устройстве, если не указано иное. Есть много вещей, которые можно сделать, поэтому мы рассмотрим каждую настройку в отдельности. Развлекайтесь!

Определение местоположения

В приложении Family Link есть специальная карта для поиска телефона ребёнка. Просто нажмите кнопку включения, и вам будет показана карта, где находится телефон. С помощью этой функции вы можете легко найти телефон вашего ребёнка (и, надеюсь, самого ребёнка). Эту настройку можно использовать чтобы найти телефон, если ребёнок где-нибудь оставит свой телефон.

Функции контроля

На экране «Настройки» можно получить доступ к базовым параметрам родительского контроля. Нажмите синий текст «Управление», чтобы получить доступ ко всем параметрам. Отсюда вы можете ограничить контент, который ваш ребёнок видит в Google Play, управлять фильтрами в Google Chrome, YouTube, поиске Google и местоположении.

Читайте так же:
Как синхронизировать айфон и андроид по блютуз

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

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

Отслеживайте активность использования телефона

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

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

Время использования устройства

Детям, скорей всего, не следует торчать в телефоне весь день. Есть целый раздел для ограничения использования времени экрана. Первая вкладка, «Ограничения», позволяет устанавливать ежедневные ограничения времени работы за смартфоном. Например, вы можете установить ограничение три часа в школьные дни и шесть часов в выходные.

Вторая вкладка «Время сна», позволяет жёстко ограничить время, в которое дети могут пользоваться своими телефонами. После настройки и наступлении времени ограничения телефон ребёнка заблокируется, и он не сможет получить к нему доступ до утра.

Настройки устройства

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector