我想为要与服务器同步的内容实现 SyncAdapter。似乎要这样做,您需要为您在 SyncAdapter XML 属性文件中指定的权限注册一个 ContentProvider。
由于我不希望手机的其余部分可以访问此内容,因此我没有实现自己的 ContentProvider 并使用个人实现来存储此内容。
你知道是否可以在不提供 ContentProvider 的情况下使用 SyncAdapter 来提供同步?
非常感谢你。
我想为要与服务器同步的内容实现 SyncAdapter。似乎要这样做,您需要为您在 SyncAdapter XML 属性文件中指定的权限注册一个 ContentProvider。
由于我不希望手机的其余部分可以访问此内容,因此我没有实现自己的 ContentProvider 并使用个人实现来存储此内容。
你知道是否可以在不提供 ContentProvider 的情况下使用 SyncAdapter 来提供同步?
非常感谢你。
在实现 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" />
在您的清单中:
<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;
}
}
现在,即使是 Google 的官方文档也建议您使用 stub (dummy) ContentProvider
。
https://developer.android.com/training/sync-adapters/index.html