38

サーバーと同期したいコンテンツに SyncAdapter を実装したいと考えています。そのためには、SyncAdapter XML プロパティ ファイルで指定した機関に登録された ContentProvider が必要なようです。

このコンテンツに電話の他の部分からアクセスできないようにするため、独自の ContentProvider を実装せず、個人的な実装を使用してこのコンテンツを保存しました。

ContentProvider を提供せずに SyncAdapter を使用して同期を提供できるかどうか知っていますか?

どうもありがとうございました。

4

2 に答える 2

56

SyncAdapter を実装するときは常にコンテンツ プロバイダーを指定する必要がありますが、実際に何もしなければならないというわけではありません。

私は、アカウントを作成し、Android の「アカウントと同期」フレームワークと統合する SyncAdapter を作成しました。これは、必ずしもコンテンツを標準プロバイダーに保存する必要はありません。

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

あなたのマニフェストで:

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

そして、存在すること以外は何の役にも立たないダミー プロバイダー 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;
    }
}
于 2011-01-10T19:23:57.223 に答える
6

現在、Google の公式ドキュメントでさえ、スタブ (ダミー) を使用することを推奨していますContentProvider

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

于 2015-07-09T08:10:08.587 に答える