我在互联网上观看了关于ContentProvider
的课程,演示了如何定义和使用ContentProvider
。
我对使用名为getContentResolver()
的方法感到困惑。这种方法有什么回报?
我的ContentProvider
未实例化,代码只写了getContentProvider().query()
。
我不明白ContentProvider
是如何运作的。
答案 0 :(得分:49)
它返回内容解析器。
什么是内容解析器?
内容解析程序是应用程序中的单个全局实例,它提供对您(和其他应用程序)内容提供程序的访问。内容解析器的行为与其名称完全相同:它接受来自客户端的请求,并通过将这些请求指向具有不同权限的内容提供程序来解析这些请求。为此,内容解析器存储从权限到内容提供者的映射。这种设计很重要,因为它允许以简单而安全的方式访问其他应用程序的内容提供商。
内容解析器包括与Content Provider类中的抽象方法(插入,删除,查询,更新)相对应的CRUD(创建,读取,更新,删除)方法。内容解析器不知道它正在与之交互的内容提供者的实现(也不需要知道);每个方法都传递一个URI,指定要与之交互的内容提供者。
什么是内容提供商?
尽管内容解析器提供了应用程序内容提供者的抽象,但内容提供者提供了对基础数据源的抽象(即SQLite database
)。它们提供了定义数据安全性的机制(即通过强制执行读/写权限),并提供一个标准接口,将一个进程中的数据与另一个进程中运行的代码连接起来。
内容提供商基于使用content:// schema
的简单URI寻址模型,提供用于发布和使用数据的界面。它们使您能够将应用程序层与底层数据层分离,从而通过抽象底层数据源使您的应用程序与数据源无关。
答案 1 :(得分:1)
getContentResolver()返回应用程序包的ContentResolver实例。
从developer.android.com粘贴它
内容提供商管理对结构化数据集的访问。它们封装了数据,并提供了定义数据安全性的机制。内容提供程序是将一个进程中的数据与另一个进程中运行的代码连接起来的标准接口。
如果要访问内容提供程序中的数据,可以使用应用程序上下文中的ContentResolver对象作为客户端与提供程序进行通信。 ContentResolver对象与提供程序对象进行通信,提供程序对象是实现ContentProvider的类的实例。提供者对象从客户端接收数据请求,执行请求的操作,并返回结果。
http://developer.android.com/guide/topics/providers/content-providers.html