Несколько элементов адаптера синхронизации Android, таких как учетная запись Google?

В настоящее время мое приложение для Android настроено на использование функции AccountManager Android с использованием SyncAdapter и аутентифицированной учетной записи для автоматического выполнения синхронизации.

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

Как я могу иметь несколько элементов синхронизации, как это делает Google?

Снимок экрана аккаунта Google


person James Goodwin    schedule 23.06.2015    source источник


Ответы (2)


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

Манифест содержит:

<service android:exported="true" android:name="com.example.FooSyncAdapterService">
  <intent-filter>
    <action android:name="android.content.SyncAdapter" />
  </intent-filter>
  <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter_foo" />
</service>
<service android:exported="true" android:name="com.example.BarSyncAdapterService">
  <intent-filter>
    <action android:name="android.content.SyncAdapter" />
  </intent-filter>
  <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter_bar" />
</service>

И syncdataper_foo это

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="foo"
    android:accountType="com.example"
    android:allowParallelSyncs="true" />

И syncdataper_bar это

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="bar"
    android:accountType="com.example"
    android:allowParallelSyncs="true" />

Обратите внимание, что в случае типа учетной записи «com.google» адаптеры синхронизации предоставляются даже разными приложениями (Диск, Документы, Таблицы, Gmail, Календарь и т. д.).

person rds    schedule 01.07.2015
comment
Спасибо, я пробовал это раньше, но ваш ответ заставил меня заметить, что у вас разные contentAuthority для каждого SyncAdapter, это показало мне проблему: должно быть несколько ContentProviders, каждый из которых зарегистрирован в contentAuthority, указанном в xml-файле SyncAdapter. Большое спасибо! - person James Goodwin; 01.07.2015
comment
Как я могу установить метку, как на изображении в вопросе? - person waldemar; 18.02.2018

Я хотел бы просто добавить основной атрибут, который делает тип синхронизации видимым в меню учетных записей, к приведенному выше ответу.

"android:userVisible="true"

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="foo"
    android:accountType="com.example"
    android:allowParallelSyncs="true" 
    android:userVisible="true"/> // this line does the job of showing up.
person Ravindra    schedule 20.01.2017