没有ContentProvider的SyncAdapter

Moy*_*ard 38 android android-contentprovider android-syncadapter

我想为我想要与服务器同步的内容实现SyncAdapter.看来要这样做,您需要为SyncAdapter XML属性文件中指定的权限注册ContentProvider.

由于我不希望手机的其余部分可以访问此内容,因此我没有实现自己的ContentProvider并使用个人实现来存储此内容.

您是否知道在不提供ContentProvider的情况下是否可以使用SyncAdapter提供同步?

非常感谢你.

Jer*_*ady 56

在实现SyncAdapter时,您始终必须指定内容提供程序,但这并不是说它实际上必须执行任何操作.

我编写了SyncAdapter,用于创建帐户并与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" />
Run Code Online (Sandbox Code Playgroud)

在你的清单中:

<provider android:name="DummyProvider"
    android:authorities="com.company.content"
    android:syncable="true"
    android:label="DummyProvider" />   
Run Code Online (Sandbox Code Playgroud)

然后添加一个虚拟提供程序,除了存在之外没有任何有用的东西,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 另外,SDK中的SampleSyncAdapter并未声明内容提供程序,因为它使用本机Android权限com.android.contacts,它具有自己的提供程序com.android.providers.contacts. (7认同)
  • 我找了很长时间才找到更好的解决方案而没有找到并分享你的痛苦. (3认同)
  • 非常感谢,我不喜欢这种使用虚拟提供者的想法,但可能别无选择. (2认同)

Ran*_*ku' 6

现在,即使Google的官方文档也建议您使用存根(虚拟)ContentProvider.

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