Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

内容提供程序

内容提供程序有助于应用管理其自身和其他应用所存储数据的访问,并提供与其他应用共享数据的方法。它们会封装数据,并提供用于定义数据安全性的机制。内容提供程序是一种标准接口,可将一个进程中的数据与另一个进程中运行的代码进行连。实现内容提供程序大有好处。最重要的是,通过配置内容提供程序,您可以使其他应用安全地访问和修改您的应用数据(如图 1 所示)。

内容提供程序如何管理存储空间访问的概览图。

图 1. 内容提供程序如何管理存储空间访问的概览图。

如果您计划共享数据,则可使用内容提供程序。如果您不打算共享数据,也可使用内容提供程序,因为它们可以提供很好的抽象,但无需如此。此抽象可让您修改应用数据存储实现,同时不会影响依赖数据访问的其他现有应用。在此情况下,受影响的只有您的内容提供程序,而非访问该提供程序的应用。例如,您可以将 SQLite 数据库换成其他存储空间(如图 2 所示)。

迁移内容提供程序存储空间的示意图。

图 2. 迁移内容提供程序存储空间的图示意图。

许多其他类依赖于 ContentProvider 类:

如果您正在使用以上某个类,则还需在应用中实现内容提供程序。请注意,使用同步适配器框架时,您还可使用另一种方案:创建存根内容提供程序。如需了解有关此主题的更多信息,请参阅创建存根内容提供程序。此外,在下列情况下,您需要自定义内容提供程序:

  • 您希望在自己的应用中实现自定义搜索建议
  • 您需要使用内容提供程序向微件公开应用数据
  • 您希望将自己应用内的复杂数据或文件复制并粘贴到其他应用中

Android 框架内的某些内容提供程序可管理音频、视频、图像和个人联系信息等数据。android.provider 软件包参考文档中列出了其中的部分提供程序。虽然存在一些限制,但任何 Android 应用均可访问这些提供程序。

内容提供程序可用于管理对各种数据存储源的访问,包括结构化数据(如 SQLite 关系型数据库)和非结构化数据(如图像文件)。如需了解 Android 可用存储类型的详细信息,请参阅存储选项设计数据存储

内容提供程序的优点

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

您可以使用内容提供程序将细节抽象化,以用于访问应用中的不同数据源。例如,您的应用可能会在 SQLite 数据库中存储结构化记录,以及视频和音频文件。如果您在应用中实现此开发模式,则可使用内容提供程序访问所有这类数据。

另请注意,CursorLoader 对象依赖于内容提供程序来运行异步查询,进而将结果返回至应用的界面层。如需了解有关使用 CursorLoader 在后台加载数据的更多信息,请参阅使用 CursorLoader 运行查询

以下主题详细描述了内容提供程序:

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

如需了解与此页面相关的示例代码,请参阅基本同步适配器示例应用