SyncAdapter без ContentProvider - PullRequest
       24

SyncAdapter без ContentProvider

38 голосов
/ 10 января 2011

Я хочу реализовать SyncAdapter для контента, который я хочу синхронизировать с сервером. Похоже, что для этого вам нужен ContentProvider, зарегистрированный для полномочий, указанных в файле свойств SyncAdapter XML.

Поскольку я не хочу, чтобы этот контент был доступен для остальной части телефона, я не реализовал свой собственный ContentProvider и использовал личную реализацию для хранения этого контента.

Знаете ли вы, можно ли обеспечить синхронизацию с помощью SyncAdapter без предоставления ContentProvider?

Большое спасибо.

Ответы [ 2 ]

56 голосов
/ 10 января 2011

При реализации SyncAdapter вы всегда должны указывать поставщика контента, но это не значит, что он действительно должен что-то делать.

Я написал 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;
    }
}
6 голосов
/ 09 июля 2015

Теперь даже официальная документация Google предлагает использовать заглушку (пустышку) ContentProvider.

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

...