我试着理解Android的同步逻辑。我不理解的是Android SDK示例项目SampleSyncAdapter中包含的syncadapter.xml文件。如果您下载了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"
/>发布于 2011-03-03 00:24:21
在制作SyncAdapter时,您可以使用两种基本方法:
将数据填充到现有ContentProvider.
前者是这个示例应用程序中发生的事情。他们有一些网站上有联系人列表,他们希望将这些联系人与设备上的其他联系人一起存储。在任何一种情况下,这一切的工作方式都是通过三个组件之间的关系:
一个Android设备可以有许多不同的ContentProviders和SyncAdapters。由于ContentResolver可能不是与SyncAdapter相同的.apk的一部分,因此ContentResolver是一个系统服务,它可以找到正确的ContentProvider来存储给定类型的数据。它使用唯一标识一个特定ContentProvider的ContentAuthority字符串来实现这一点。此外,每个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。
发布于 2010-12-22 10:07:53
当你的APK被加载时,清单中的指令告诉操作系统审查所有元数据。在本例中,它是Android联系人的内容元数据。用于查找提供商的名称是com.android.contacts (由Android定义) --所有者拥有对其数据库(即ContentProvider)提供内容访问的“权限”。
N.B.您可以是您自己的数据的内容提供商,这些数据可以与您的非联系人web服务同步。元数据是一种向操作系统注册的机制,因此您可以在广播消息期间找到它。
根据您提供的“同步类型”,此定义的元数据将与您的SyncAdapter相关联。类型的名称是android:accountType,可能是'com.mycompany.myapp‘。该密钥在广播到所有同步适配器期间使用,您编码的BroadcastReceiver将处理与您的类型相关的消息。
这是关系的开始,也是术语的一些分解。
发布于 2014-06-25 18:34:49
这是一种在帐户类型、同步适配器和内容颁发机构之间创建关系的方法
再次回顾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" />它告诉Android我们定义的同步适配器(在包含此文件的标签的name元素中调用的类)将使用com.example.android.samplesync样式帐户同步联系人。帐户类型和权限对于您的应用程序是唯一的。
您的所有contentAuthority字符串必须全部匹配,并且与您正在同步的内容相匹配--如果您正在创建自己的数据库,则这应该是您定义的字符串,或者如果您正在同步已知数据类型(如联系人或日历事件等),则应该使用一些现有的设备字符串。上面的("com.android.contacts")恰好是联系人类型数据(惊喜,惊喜)的ContentAuthority字符串。
accountType还必须匹配已输入的已知帐户类型之一,或者它必须与您正在创建的帐户类型匹配。
Last userVisible true表示显示给用户。
https://stackoverflow.com/questions/3994843
复制相似问题