内容提供程序

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

实现内容提供程序有很多优势。最重要的是,您可以配置内容提供程序以允许其他应用程序安全地访问和修改您的应用数据,如插图 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 平台中包含的联系人提供程序。