ContentProvider, 内容提供者,它管理Android以,结构化方式存放的数据,它以相对安全的方式封装数据并且提供简易的处理机制。ContentProvider提供不同进程间数据交互的标准化接口,是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法。
ContentProvider是允许不同应用进行数据交换的标准的API,ContentProvider以Uri的形式对外提供数据的访问操作接口,而其他应用则通过ContentResolver根据Uri去访问指定的数据。
一旦某个应用通过ContentProvider暴露了自己的数据接口,那么不管该应用程序是否启动,其他程序都可以通过该接口来操作自己的数据接口来操作其内部的数据,包括增加数据,删除数据,修改数据,查询数据等.
是一个用于标识某一互联网资源名称的字符串 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义
Uri由三个部分:访问资源的命名机制(ContentProvider的默认为content)、存放资源的主机名、资源自身的名称组成,使用的URI语法结构如下:
content://<authority>/<data_path>/<id>
ContentProvider的使用离不开Uri类的支持,在自己的继承类中使用UriMatcher,根据UriMatcher.match(Uri uri)返回的表示符,进行不同范围,不同数据集的操作。
外界的程序通过ContentResolver可以访问ContentProvider提供的数据;
一旦定义好自己的ContentProvider类,就可以使用ContentResolver进行访问操作了。ContentResolver类的方法都会在其内部调用URI主机部分确定的ContentProvider,ContentProvider实现了底层数据的增,删,查,改的功能.
使用:
Cursor cs = getContentResolver().query();
具体操作与数据库query方法相同
android系统管理联系人的URI如下:
ContactsContract.Contacts.CONTENT_URI
管理联系人的Uri
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
管理联系人的电话的Uri
ContactsContract.CommonDataKinds.Email.CONTENT_URI
管理联系人的Email的Uri
(注:Contacts有两个表,分别是rawContact和Data,rawContact记录了用户的id和name,data表中有Email的信息)
ContactsContract.Contacts._ID
ContactContract.Contracts.DISPLAY_NAME
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
电话号码栏名称为:ContactsContract.CommonDataKinds.Phone.NUMBER.
.
Email地址栏名称为:ContactsContract.CommonDataKinds.Email.DATA
ContactsContract.CommonDataKinds.Email.CONTACT_ID
android为多媒体提供的ContentProvider的Uri如下:
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
存储在sd卡上的音频文件
MediaStore.Audio.Media.INTERNAL_CONTENT_URI
存储在手机内部存储器上的音频文件
MediaStore.Audio.Images.EXTERNAL_CONTENT_URI
SD卡上的图片文件内容
MediaStore.Audio.Images.INTERNAL_CONTENT_URI
手机内部存储器上的图片
MediaStore.Audio.Video.EXTERNAL_CONTENT_URI
SD卡上的视频
MediaStore.Audio.Video.INTERNAL_CONTENT_URI
手机内部存储器上的视频
短信URI: Content://sms
发送箱中的短信URI: Content://sms/outbox
(相应栏名称address, subject(标题), time)
最后记得在AndroidManifest.xml声明读写权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
这个我暂时还没用过,等我用过了我再补上