SyncAdapter без ContentProvider

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

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

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

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

Ответ 1

Вы всегда должны указывать поставщика контента при внедрении 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;
    }
}