代码之家  ›  专栏  ›  技术社区  ›  xpepermint

如何使用Android SyncAdapter?

  •  51
  • xpepermint  · 技术社区  · 14 年前

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

    SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml
    

    我知道,内容提供者的权限应该是字符串或对资源的引用。内容权威到底是什么,在哪里 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"
    />
    
    3 回复  |  直到 10 年前
        1
  •  71
  •   JJD    13 年前

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

    1. ContentProvider .
    2. 创建自己的ContentProvider来存储新类型的数据。

    1. 一个ContentProvider,它存储数据。
    2. SyncAdapter,它与远程服务器通信以获取要放入ContentProvider的数据。
    3. Android ContentResolver,它可以计算出如何将SyncAdapters和ContentProviders配对。

    Android设备可以有许多不同的内容提供者和许多不同的syncadapter。因为ContentResolver可能不是同一个的一部分 .apk文件 作为SyncAdapter,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>
    

    在这种情况下,使用现有的ContentProvider,您需要查看平台文档以查看它们使用的ContentAuthority字符串,并使用相同的字符串。如果要创建自己的ContentProvider,只需确保创建的ContentAuthority是唯一的。最好的方法是在Authority中使用部分域名(java类样式)。按相反的顺序写。这在他们的例子中得到了说明。。。 com.android.contacts

        2
  •  5
  •   mobibob    14 年前

    当您的APK被加载时,清单中的指令告诉操作系统检查所有元数据。在本例中,它是Android联系人的内容元数据。用于查找提供者的名称是com.android.contacts(由android定义),所有者有“权限”提供对其数据库(即content provider)的内容访问。

    你可以成为自己数据的内容提供商,这些数据可以与非联系人的web服务同步。元数据是一种向操作系统注册的机制,以便您可以在广播消息期间找到它。

    这是关系的开始和术语的一些分解。

        3
  •  2
  •   Nishant Shah    11 年前

    再次回顾AndroidManifest,同步服务中奇怪的元数据标记是在ContentAuthority和帐户之间建立绑定的关键部分。它在外部引用另一个xml文件(可以随意调用,与应用程序相关的文件)

    让我们看看sync_myapp.xml:

        <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" />
    

    所有contentAuthority字符串必须全部匹配,并且与您正在同步的内容匹配——如果您正在创建自己的数据库,则应该是您定义的字符串,或者如果您正在同步已知的数据类型(如联系人或日历事件或您拥有的内容),则应该使用一些现有的设备字符串。上面的(“com.android.contacts”)碰巧是联系人类型数据的ContentAuthority字符串(惊奇,惊奇。)

    accountType还必须与已输入的已知帐户类型之一匹配,或者必须与正在创建的帐户类型匹配。

    最后一个userVisible true表示显示给用户。