2015-06-23 31 views
10

Attualmente ho la mia app per Android configurata per utilizzare la funzione AccountManager di Android, utilizzando un SyncAdapter e un account autenticato per eseguire automaticamente le sincronizzazioni.Elementi dell'adattatore di sincronizzazione multipla Android come l'account Google?

Ho solo un adattatore di sincronizzazione in esecuzione che sincronizza tutto il contenuto, ma vorrei separarlo per eseguire sincronizzazioni per contenuti diversi a intervalli diversi.

Come posso avere più elementi di sincronizzazione come Google?

Google account screenshot

risposta

22

Non vi resta che definire diversi adattatori di sincronizzazione, utilizzando lo stesso tipo di account.

Il manifesto contiene:

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

E syncdataper_foo è

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

E syncdataper_bar è

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

Si noti che nel caso del tipo di account "com.google", gli adattatori di sincronizzazione sono forniti anche da diverse applicazioni (Drive, Documenti, Fogli , Gmail, calendario, ecc.).

+1

Grazie, avevo provato prima, ma la tua risposta mi ha portato a notare tu avessi un contentAuthority diverso per ogni SyncAdapter, questo mi ha mostrato il problema- ci deve essere più ContentProvider, ciascuno registrato per il contenutoAuthority specificato nel file xml di SyncAdapter. Grazie mille! –

+0

Come posso impostare l'etichetta come nell'immagine in questione? – waldemar

2

Vorrei semplicemente aggiungere l'attributo principale che rende visibile il tipo di sincronizzazione nel menu degli account alla risposta sopra.

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