首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用安卓SyncAdapter?

如何使用安卓SyncAdapter?
EN

Stack Overflow用户
提问于 2010-10-22 15:50:17
回答 3查看 48.2K关注 0票数 53

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

代码语言:javascript
复制
SDK/android-sdk-PLATFORM/samples/android-VERSION/SampleSyncAdapter/res/xml/syncadapter.xml

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

代码语言:javascript
复制
<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"
/>
EN

回答 3

Stack Overflow用户

发布于 2011-03-03 00:24:21

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

将数据填充到现有ContentProvider.

  • Create您自己的ContentProvider中,以存储新类型的数据。

前者是这个示例应用程序中发生的事情。他们有一些网站上有联系人列表,他们希望将这些联系人与设备上的其他联系人一起存储。在任何一种情况下,这一切的工作方式都是通过三个组件之间的关系:

  1. 存储数据的ContentProvider。
  2. 与远程服务器通信以获取数据并放入ContentProvider.
  3. The Android ContentResolver中的
  4. SyncAdapter,它确定如何将SyncAdapters和Android配对。

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

代码语言:javascript
复制
<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

票数 73
EN

Stack Overflow用户

发布于 2010-12-22 10:07:53

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

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

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

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

票数 5
EN

Stack Overflow用户

发布于 2014-06-25 18:34:49

这是一种在帐户类型、同步适配器和内容颁发机构之间创建关系的方法

再次回顾AndroidManifest,同步服务中奇怪的元数据标签是在ContentAuthority和帐户之间建立绑定的关键部分。它外部引用了另一个xml文件(您喜欢叫它什么,都可以叫它与您的应用程序相关的东西)。

让我们来看看sync_myapp.xml:

代码语言:javascript
复制
    <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" />

它告诉Android我们定义的同步适配器(在包含此文件的标签的name元素中调用的类)将使用com.example.android.samplesync样式帐户同步联系人。帐户类型和权限对于您的应用程序是唯一的。

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

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

Last userVisible true表示显示给用户。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3994843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档