天天看点

【Android基础】内容提供者ContentProvider的使用详解1.什么是ContentProvider2.如何定义一个ContentProvider3.外部应用如何使用我们的ContentProvider

首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少。

ContentProvider为不同的软件之间数据共享,提供统一的接口。也就是说,如果我们想让其他的应用使用我们自己程序内的数据,就可以使用ContentProvider定义一个对外开放的接口,从而使得其他的应用可以使用咱们应用的文件、数据库内存储的信息。当然,自己开发的应用需要给其他应用共享信息的需求可能比较少见,但是在Android系统中,很多系统自带应用,比如联系人信息,图片库,音频库等应用,为了对其他应用暴露数据,所以就使用了ContentProvider机制。所以,我们还是要学习ContentProvider的基本使用,在遇到获取联系人信息,图片库,音频库等需求的时候,才能更好的实现功能

Android系统为了让我们更好的对外暴露数据,提供了统一的接口,所以定义了抽象类ContentProvider,因此,如果我们想对外提供数据,我们需要继承ContentProvider,并且实现下面的这几个方法:

onCreate()

当我们的provider初始化时被调用,我们应该在这个方法里面完成部分初始化操作

query() 查询方法,用于给调用者返回数据

insert() 插入操作,用于让外部应用插入数据到内容提供者中

update() 更新操作,用于更新内容提供者的数据

delete() 用于删除数据

getType 返回内容提供者的MIME Type

上面这些方法,当我们继承自ContentProvider的时候,eclipse会自动的给我们添加,但是这并不代表我们每个方法都需要自定义实现。如果我们只希望给其他应用提供数据,而不允许其他应用修改我们的数据,那么我们只需要实现onCreate(),getType()和query()这三个方法就可以了,其他的三个方法我们可以根据业务需求,实现或者是不实现。

因为一般使用ContentProvider向外部暴露数据库的信息,因此,本篇将以使用ContentProvider向其他应用暴露数据库信息为例,讲解ContentProvider的基本使用。

Android中SQLite数据库的创建和使用,本篇不再介绍,不清楚的请看这篇文章

假设读者已经学会了SQLite数据库的使用,并且已经建立好了数据库,下面我们开始写我们的ContentProvider。

因为注释解析的比较详细,所以就不过多解释了

我们在定义好我们的ContentProvider之后,因为ContentProvider数据四大组件之一,因此我们还需要在AndroidManifest清单文件中进行注册才能使用,下面是注册信息

注意,provider的声明和activity一样,都是在application节点进行声明的。

至此,我们就完成了我们自己的ContentProvider的生命,其他的应用现在就可以使用我们往外部暴露的数据信息了。

我们已经定义好了我们自己的ContentProvider,那么外部应用如何调用呢?

下面,我将新建一个测试单元工程,完成对ContentProvider的各个方法的测试

添加方法测试

删除方法测试

修改方法测试

上面的方法都经过了单元测试。

好了,至此,我们就使用ContentProvider实现了在第三方应用中对我们应用的数据库进行增删改查等操作,如有疑问,请留言。

继续阅读