2011-01-10 9 views
35

Ich möchte einen SyncAdapter für einen Inhalt implementieren, den ich mit einem Server synchronisieren möchte. Zu diesem Zweck benötigen Sie einen ContentProvider, der für die von Ihnen in der SyncAdapter-XML-Eigenschaftendatei angegebene Berechtigung registriert ist.SyncAdapter ohne ContentProvider

Da ich nicht möchte, dass dieser Inhalt für den Rest des Telefons zugänglich ist, habe ich keinen eigenen ContentProvider implementiert und eine persönliche Implementierung verwendet, um diesen Inhalt zu speichern.

Wissen Sie, ob es möglich ist, eine Synchronisation mit einem SyncAdapter bereitzustellen, ohne einen ContentProvider bereitzustellen?

Vielen Dank.

+0

verwandte (später) Frage [Soll ich android Accountmanager verwenden?] (Http://stackoverflow.com/a/8614699/94363) – rds

Antwort

52

Sie müssen immer einen Inhaltsanbieter angeben, wenn Sie einen SyncAdapter implementieren, aber das bedeutet nicht, dass er tatsächlich etwas tun muss.

Ich habe SyncAdapters geschrieben, die Konten erstellen und mit dem "Accounts & Sync" -Framework in Android integrieren, die nicht unbedingt ihren Inhalt in einem Standardanbieter speichern.

In Ihrem 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" /> 

In Ihrem Manifest:

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

Und dann ein Dummy-Anbieter hinzufügen, die nichts tut nützlich außer existieren, 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

Vielen Dank, ich weiß nicht wirklich, wie diese Idee mit einem Dummy-Anbieter, aber möglicherweise keine andere Wahl. – Moystard

+3

Ich suchte lange nach einer besseren Lösung und fand keine und teile deine Schmerzen. –

+7

Nebenbei bemerkt, SampleSyncAdapter, das im SDK gefunden wird, deklariert keinen Inhaltsanbieter, da es eine native Android-Autorität namens com.android.contacts verwendet, die ihren eigenen Provider com.android.providers.contacts hat. – ChaimKut

Verwandte Themen