2011-01-10 11 views
35

Desidero implementare un SyncAdapter per un contenuto che desidero sincronizzare con un server. Sembra che per fare ciò, è necessario un ContentProvider registrato per l'autorizzazione specificata nel file di proprietà XML SyncAdapter.SyncAdapter senza ContentProvider

Poiché non voglio che questo contenuto sia accessibile al resto del telefono, non ho implementato il mio ContentProvider e ho utilizzato un'implementazione personale per archiviare questo contenuto.

Sapete se è possibile fornire una sincronizzazione utilizzando un SyncAdapter senza fornire un ContentProvider?

Grazie mille.

+0

correlata (in seguito) domanda [Dovrei usare AccountManager Android?] (Http://stackoverflow.com/a/8614699/94363) – rds

risposta

52

Devi sempre specificare un fornitore di contenuti quando si implementa un SyncAdapter, ma questo non vuol dire che debba effettivamente fare qualcosa.

Ho scritto SyncAdapters che creano account e si integrano con il framework "Account & sync" in Android che non necessariamente memorizza il loro contenuto in un provider standard.

Nel vostro xml/syncadapter.xml:

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" 
    android:accountType="com.company.app" 
    android:contentAuthority="com.company.content" 
    android:supportsUploading="false" /> 

Nel vostro manifesto:

<provider android:name="DummyProvider" 
    android:authorities="com.company.content" 
    android:syncable="true" 
    android:label="DummyProvider" /> 

e quindi aggiungere un fornitore fittizio che non fa nulla di utile, tranne esistere, DummyProvider.java:

public class DummyProvider extends ContentProvider { 

    @Override 
    public int delete(Uri uri, String selection, String[] selectionArgs) { 
     return 0; 
    } 

    @Override 
    public String getType(Uri uri) { 
     return null; 
    } 

    @Override 
    public Uri insert(Uri uri, ContentValues values) { 
     return null; 
    } 

    @Override 
    public boolean onCreate() { 
     return false; 
    } 

    @Override 
    public Cursor query(Uri uri, String[] projection, String selection, 
        String[] selectionArgs, String sortOrder) { 
     return null; 
    } 

    @Override 
    public int update(Uri uri, ContentValues values, String selection, 
        String[] selectionArgs) { 
     return 0; 
    } 
} 
+2

La ringrazio molto, non mi piace molto questa idea di usare un fornitore fittizio ma potrebbe non avere scelta. – Moystard

+3

Ho cercato a lungo una soluzione migliore e non ho trovato nessuno e ho condiviso il tuo dolore. –

+7

Per inciso, SampleSyncAdapter trovato nell'SDK non dichiara un provider di contenuti poiché utilizza un'autorità nativa Android, com.android.contacts, che ha il proprio provider com.android.providers.contacts. – ChaimKut

Problemi correlati