内容提供商

内容提供商可以帮助应用管理对自身或由其他应用存储的数据的访问,并提供与其他应用共享数据的方式。它们封装数据并提供定义数据安全的机制。内容提供商是将一个进程中的数据与另一个进程中运行的代码连接起来的标准接口。

实现内容提供商有许多优点。最重要的是,您可以配置内容提供商,让其他应用安全地访问和修改您的应用数据,如图 1 所示。

Overview diagram of how content providers manage access to storage.

图 1. 内容提供商如何管理存储访问的概览图。

如果您计划共享数据,请使用内容提供商。如果您不打算共享数据,则不必使用它们,但您可能会选择使用它们,因为它们提供了一种抽象,可让您修改应用数据存储实现,而不会影响依赖于访问您的数据的其他应用。

在这种情况下,只有您的内容提供商会受到影响,而访问它的应用不会。例如,您可能会用替代存储空间替换 SQLite 数据库,如图 2 所示。

Illustration of migrating content provider storage.

图 2. 迁移内容提供商存储的图示。

许多其他类都依赖于 ContentProvider

如果您使用这些类中的任何一个,则需要在您的应用中实现一个内容提供商。在使用同步适配器框架时,您也可以创建一个存根内容提供商作为替代方案。如需了解更多信息,请参阅创建存根内容提供商。此外,在以下情况下,您需要自己的内容提供商

  • 在您的应用中实现自定义搜索建议。
  • 将您的应用数据公开给微件。
  • 将复杂数据或文件从您的应用复制并粘贴到其他应用。

Android 框架包含管理音频、视频、图像和个人联系信息等数据的内容提供商。您可以在 android.provider 包的参考文档中看到其中一些。在某些限制下,这些提供商可供任何 Android 应用访问。

内容提供商可用于管理对各种数据存储来源的访问,包括结构化数据(如 SQLite 关系数据库)或非结构化数据(如图像文件)。有关 Android 上可用存储类型的更多信息,请参阅数据和文件存储概览设计数据存储

内容提供商的优点

内容提供商提供对访问数据权限的精细控制。您可以选择仅限制访问应用内部的内容提供商,授予对其他应用的数据的全面访问权限,或为数据的读取和写入配置不同的权限。有关安全使用内容提供商的更多信息,请参阅数据存储的安全提示内容提供商权限

您可以使用内容提供商抽象化应用中访问不同数据源的细节。例如,您的应用可能在 SQLite 数据库中存储结构化记录,以及视频和音频文件。您可以使用内容提供商访问所有这些数据。

此外,CursorLoader 对象依赖于内容提供商来运行异步查询,然后将结果返回到应用的 UI 层。有关使用 CursorLoader 在后台加载数据的更多信息,请参阅加载程序

以下主题更详细地描述了内容提供商

内容提供商基础知识
如何使用现有内容提供商访问和更新数据。
创建内容提供商
如何设计和实现自己的内容提供商。
日历提供商概览
如何访问 Android 平台中包含的日历提供商。
联系人提供商
如何访问 Android 平台中包含的联系人提供商。