如何使用Android SyncAdapter?

xpe*_*int 51 android android-contentprovider android-syncadapter

我尝试了解Android同步逻辑.我不明白的是syncadapter.xmlAndroid SDK示例项目中包含的文件SampleSyncAdapter.如果您下载了SDK示例,则它应位于以下文件夹中:

SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml
Run Code Online (Sandbox Code Playgroud)

我读过,内容提供者的权限应该是字符串或对资源的引用.内容权限到底是什么com.android.contacts?以下是文件的内容(没有许可证信息和注释,API级别16).

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.android.contacts"
    android:accountType="com.example.android.samplesync"
    android:supportsUploading="false"
    android:userVisible="true"
/>
Run Code Online (Sandbox Code Playgroud)

jcw*_*ger 71

制作SyncAdapter时可以使用两种基本方法:

  1. 将数据填充到现有的ContentProvider中.
  2. 创建自己的ContentProvider以存储新类型的数据.

前者是这个示例应用程序中正在发生的事情.他们有一些网站有一个联系人列表,他们希望将这些联系人与设备上的其他联系人一起存储.无论哪种情况,这一切的方式都是通过三个组成部分之间的关​​系:

  1. ContentProvider,用于存储数据.
  2. SyncAdapter,与远程服务器通信以获取要放入ContentProvider的数据.
  3. Android ContentResolver,它解决了如何配对SyncAdapter和ContentProviders.

Android设备可以有许多不同的ContentProviders和许多不同的SyncAdapter.由于ContentResolver可能不是与SyncAdapter 相同的.apk的一部分,因此ContentResolver是一种系统服务,可以找到正确的ContentProvider来存储给定类型的数据.它使用ContentAuthority字符串执行此操作,该字符串唯一标识一个特定的ContentProvider.此外,必须声明每个ContentProvider,AndroidManifest.xml以确保ContentResolver可以找到它.在此声明中,您可以指定ContentProvider是否可以被其他应用程序使用,请参阅:android:exported.

<provider
    android:name=".CustomProvider"
    android:authorities="com.example.app.provider"
    android:exported="false"
    android:multiprocess="true" >
</provider>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用现有的ContentProvider,您需要查看平台文档以查看它们使用的ContentAuthority字符串,并使用相同的字符串.如果您要创建自己的ContentProvider,则只需确保您创建的ContentAuthority是唯一的.执行此操作的最佳方法是在管理中使用您的域名(Java类样式)的一部分.以相反的顺序写下它们.这说明在他们的榜样...... com.android.contacts.


mob*_*bob 5

当你的APK加载时,清单中的指令告诉操作系统审查所有元数据.在这种情况下,它是Android联系人的内容元数据.用于查找提供程序的名称是com.android.contacts(由Android定义) - 并且所有者具有"权限"以提供对其数据库(即ContentProvider)的内容访问.

注意您可以成为自己数据的内容提供商,可以与非联系人的Web服务同步.元数据是一种向OS注册的机制,因此您可以在广播消息中找到它.

由于您提供的"同步类型",此定义的元数据将与您的SyncAdapter相关联.类型的名称是android:accountType,可能是'com.mycompany.myapp'.在向所有同步适配器广播期间使用该密钥,您的编码BroadcastReceiver将使用您的类型处理该消息.

这是关系的开始和术语的一些细分.

  • 您可以启用一些默认值,您可以定义自己的"立即同步"意图(意图).要同步 - 现在,您可以"ContentResolver.requestSync(帐户,权限,附加内容);" (查看问题http://stackoverflow.com/questions/4465765/how-to-code-a-sync-now-operation-on-android).同步适配器型号支持定期同步,{AlarmManager.INTERVAL_DAY | INTERVAL_HALF_DAY | INTERVAL_FIFTEEN_MINUTES | 等等.}.此外,如果在活动同步期间出现错误,模型将重新同步. (4认同)