Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android multiple sync adapter items like Google Account?

I currently have my Android app set up to use the AccountManager feature of Android, using a SyncAdapter and an authenticated account to performs syncs automatically.

I only have 1 sync adapter running which syncs all content, but I would like to separate this out to performs syncs for different content at different intervals.

How can I have multiple sync items like Google does?

Google account screenshot

like image 842
James Goodwin Avatar asked Jun 23 '15 08:06

James Goodwin


2 Answers

You just have to define several sync adapters, using the same account type.

The manifest contains:

<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>

And syncdataper_foo is

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

And syncdataper_bar is

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

Note that in the case of the account type "com.google", the sync adapters are even provided by different applications (Drive, Docs, Sheets, Gmail, Calendar, etc.).

like image 200
rds Avatar answered Nov 10 '22 20:11

rds


I would like to just add up the main attribute which makes the sync type visible under accounts menu to the above answer.

"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.
like image 27
Ravindra Avatar answered Nov 10 '22 21:11

Ravindra