SyncAdapter sin un ContentProvider


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 propiedad XML SyncAdapter.

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

¿Sabe si es posible proporcionar una sincronización utilizando un SyncAdapter sin proporcionar un ContentProvider?

Muchas Gracias.

Author: Moystard, 2011-01-10

2 answers

Siempre debe especificar un proveedor de contenido al implementar un SyncAdapter, pero eso no quiere decir que realmente tenga que hacer nada.

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

En su 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 tu manifiesto:

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

Y luego 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;
    }
}
 56
Author: Jerry Brady,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-10 19:23:57

Ahora, incluso la documentación oficial de Google sugiere que uses un stub (dummy) ContentProvider.

Https://developer.android.com/training/sync-adapters/index.html

 6
Author: Randy Sugianto 'Yuku',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 08:10:08