2011-01-10 11 views
35

Quiero implementar un SyncAdapter para un contenido que quiero sincronizar con un servidor. Parece que para hacerlo, necesita un ContentProvider registrado para la autoridad que especifique en el archivo de propiedades XML de SyncAdapter.SyncAdapter sin ContentProvider

Como no quiero que este contenido esté accesible para el resto del teléfono, no he implementado mi propio ContentProvider y usé una implementación personal para almacenar este contenido.

¿Sabes si es posible proporcionar una sincronización con SyncAdapter sin proporcionar ContentProvider?

Muchas gracias.

+0

relacionado (más adelante) pregunta [¿Debo usar AccountManager androide?] (Http://stackoverflow.com/a/8614699/94363) – rds

Respuesta

52

Siempre tiene que especificar un proveedor de contenido al implementar un Adaptador de sincronización, pero eso no quiere decir que realmente tenga que hacer algo.

He escrito SyncAdapters que crean cuentas e integran con el marco "Cuentas & sync" en Android que no necesariamente almacenan su contenido en un proveedor estándar.

En el código 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" /> 

En el manifiesto:

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

Y a continuación, agregar un proveedor ficticio que no hace nada útil, excepto existir, 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

Muchas gracias, realmente no me gusta esta idea de usar un proveedor ficticio, pero podría no tener otra opción. – Moystard

+3

Busqué durante mucho tiempo una solución mejor y no encontré ninguna y comparto tu dolor. –

+7

Como un lado, el SampleSyncAdapter que se encuentra en el SDK no declara un proveedor de contenido ya que usa una autoridad nativa de Android, com.android.contacts, que tiene su propio proveedor com.android.providers.contacts. – ChaimKut

Cuestiones relacionadas