web-dev-qa-db-ja.com

ContentProviderなしのSyncAdapter

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

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

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

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

38
Moystard

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

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

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;
    }
}
56
Jerry Brady

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

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