您的位置:首页 > 移动开发 > Android开发

Android中内容提供者ContentProvider的理解与基本使用

2013-03-13 17:13 603 查看
内容提供者简介
内容提供者ContentProvider是Android系统四大组件之一,用于保存和检索数据,是Android系统不同应用程序之间共享数据的接口。在Android系统中,应用程序之间是相互独立的,分别运行在自己的进程中,相互之间没有交换数据。如果应用程序之间需要共享数据,就需要用到ContentProvider了。
ContentProvider是不同应用程序之间进行数据交换的标准API,它以URI形式对外提供数据,允许其它应用操作本应用的数据。其它应用程序则使用ContentResolver,并根据ContentProvider提共的URI操作指定的数据。
创建内容提供者
创建一个内容提供者
第一步:写一个类继承ContentProvider这个抽象类,重写它的方法,例如:UserProvider.java
onCreate()创建ContentProvider时调用
query():根据传入的URI,查询指定条件下的数据
delete():删除
update():修改
insert():插入
第二步:在Android清单文件中注册这个内容提供者
<provider
android:name=”cn.itcast.user.provider.UserProvider”
android:authorities=”cn.itcast.user.provider.itcastdb”
android:exported="true"
/>
name表示内容提供者的全路径名
authorities表示其它应用程序访问本应用的内容提供者的URI,注意这个URI在整个Android
系统中要唯一,初学者在这里可以将URI理解为口令。
exported=true表示自愿暴露给第三方使用

URI简介
ContentProvider这个抽象类中的方法,多数方法需要其它应用程序访问者传入一个URI参数。URI是由三部份组件,分别是:schema、authorities、path,其中schema和authorities必写,schema固定为content://
Uri.parse(String)方法是将一个字符串转成URI对象,为了解析URI,Android提供了一个UriMatcher这个辅助类来匹配URI,常用方法如下:
1——UriMatcher(int code):创建UriMatcher时调用,参数表示如果访问者的路径错误,返回的code值
2——addURI(String authority,String path,int code):添加一组匹配规则,如果访问者的路径正确,返回code
3——int match(Uri):匹配URI与addURI中的路径是否相同,成功则返回addURI中的code值

访问内容提供者
ContentResolver的基本用法
我们手机中的很多Android应用,都对外提供了ContentProvider接口,例如:短信,只要我们知道系统短信应用的URI,就可以使用ContentResolver对象来访问系统短信应用了。
查询系统所有短信的URI为:content://sms
address:手机号
date:发送或接收短信的时间
body:发送或接收的内容
type:发送或接收的代码,接收为1号,发送是2号
如果要访问系统短信应用的话,需要在Android清单文件中配置如下权限:
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
内容观察者的使用
什么是内容观察者
当使用ContentProvider将数据共享出来之后,再使用ContentResolver查询ContentProvider共享出来的数据,是一种很常见的操作。如果应用程序需要实时监听ContentProvider共享的数据是否发生了变化,可以使用Android系统提供的内容观察者ContentObserver来实现。
内容观察者ContentObserver是用来观察指定URI所代表的数据。当ContentObserver观察到指定URI的数据发生变化时,就会触发ContentObserver的onChange()方法,此时在onChange()方法中使用ContentResolver可以查询到变化的最新数据。
ContentObserver内容观察者常用的方法如下:
1——ContentObserver(Handler handler):构造方法,参数可以是主线程Handler(可更新UI)或任何Handler
2——onChange():当观察到的URI代表的数据发生变化时,会触发该方法
创建内容观察者:
1——创建一个普通类继承ContenObserver
2——重写onChange()方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息