Syncadapter без контентапроводов
-
09-10-2019 - |
Вопрос
Я хочу реализовать синкадаптер для контента, который я хочу синхронизировать с сервером. Похоже, что для этого вам нужен ContentProvider, зарегистрированный для полномочий, который вы указываете в файле свойств Syncadapter XML.
Поскольку я не хочу, чтобы этот контент был доступен для остальной части телефона, я не реализовал свой собственный ContentProvider и использовал личную реализацию для хранения этого контента.
Знаете ли вы, если можно обеспечить синхронизацию с помощью синкадаптера без предоставления контентапроводов?
Большое тебе спасибо.
Решение
Вам всегда нужно указать провайдер контента при внедрении синкадаптера, но это не значит, что он на самом деле должен что-то делать.
Я написал Syncadapapers, которые создают учетные записи и интегрируются с рамками «Счета и синхронизация» в 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" />
А затем добавьте фиктивное поставщик, который не делает ничего полезного, кроме существующих, DuceProvider.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;
}
}
Другие советы
Теперь даже официальная документация Google предлагает вам использовать заглушку (манекен) ContentProvider
.
https://developer.android.com/trainke/sync-adapters/index.html.