目录
<a href="http://www.cnblogs.com/johntsai/p/4034062.html#1">1.contentprovider</a>
<a href="http://www.cnblogs.com/johntsai/p/4034062.html#2">2.content uri</a>
相信大家都知道大名鼎鼎的contentprovider,作为android四大组件之一,和activity、service、broadcastreceiver齐名。
今天就和大家一起来学习一下contentprovider。
android开发者文档这么说的:
content providers manage access to a structured set of data. they encapsulate the data, and provide mechanisms for defining data security.
content providers管理对有结构的数据集的访问。它们封装数据,提供了定义数据安全的机制。
这个说法似乎太官方了,不好理解。究竟contentprovider是怎样管理,封装数据呢?又是怎样保证数据安全的?
通俗的说,contentprovider是一种数据包装器。它提供统一的接口对数据进行操作,使用者不用关心数据到底是如何存储的以及数据类型到底是什么。contentprovider将数据封装好了,这样就能方便的管理数据了。它主要用于不同应用间,不同进程间的信息的共享。

大家都知道,涉及到数据的访问就要考虑到数据的安全性。怎样在保证数据的安全性的同时,又能方便的访问数据呢?
众所周知,android系统是基于linux内核的。在linux中,文件具有如下图中的一系列属性,如文件权限。不同的用户或用户组对文件有不同的读写,执行的权限。如图中的r(read),w(write),x(execute),-(无权限)。
android是基于linux的,也继承了linux的文件管理方式,通常每个应用都是独立的进程,也就是不同的用户。android为每个应用程序分配了独立的用户id和用户组id。并且由这个应用程序创建出来的文件被赋予了相应的读写权限。其他应用程序无权访问。
这样就保证了数据的安全性,但是这对数据的共享给第三方造成了不便。android系统的开发者为了解决了这个问题,设计了contentprovider类。content provider很好的兼顾了二者。
在了解content uri之前,先了解下uri.
uri:通用资源标识符(uniform resource identifier, 简称"uri")主要用于web上可用的每种资源 -html文档、图像、视频片段、程序等 - 进行定位。
android上的资源也可以用uri表示。
文档中是这么描述uri的:
a content uri is a uri that identifies data in a provider. content uris include the symbolic name entire provider (its authority) and a name that points to a table (a path).
例如:
用户字典的单词表:
<code>content://user_dictionary/word</code>
设备上存储的所有图片:
<code>content://media/internal/images</code>
联系人信息:
<code>content://contacts/people</code>
某个人的联系人信息:
<code>content://contacts/people/1</code>
使用uri的parse方法将字符串转换为uri:
<code><uri uri = uri.parse("content://com.ijtsai.contactprovider/people");></code>