概述
ContentProvider
作为安卓四大组件之一,它的作用是为不同的应用之间数据共享,提供统一的接口。我们知道安卓系统中应用内部的数据是对外隔离的,要想让其它应用能使用自己的数据(例如通讯录),这个时候就用到了ContentProvider
。
ContentProvider
实际上是对SQLiteOpenHelper
的进一步封装,以一个或多个表的形式将数据呈现给外部应用,通过Uri映射来选择需要操作数据库中的哪个表,并对表中的数据进行增删改查处理。
URI
URI(Uniform Resource Identifier)
即统一资源标识符,是一个用于标识某一互联网资源名称的字符串。下面举个栗子:
上面是一个完整的URI
,其中Host
和Port
一起为Authority
,用于唯一标识一个ContentProvider
,每个部分在安卓中都是可以通过代码获取的,下面这些方法可以获取:
getScheme()
:获取URI
中的Scheme
字符串部分。getHost()
:获取URI
中的Host
部分。getPort()
:获取URI
中的Port
部分。getPath()
:获取URI
中的Path
部分。getQuery()
:获取URI
中的Query
部分。
MIME类型
MIME(Multipurpose Internet Mail Extensions)
即多用途互联网邮件扩展类型,是指定某种扩展名的文件用什么应用程序打开的方式类型。当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
类型/子类型(Content-Type/SubType) | 扩展名 |
---|---|
application/vnd.android.package-archive | .apk |
text/plain | .txt |
image/jpeg | .jpeg |
text/html | .html |
audio/x-pn-realaudio | .rmvb |
audio/mpeg | .mp3 |
video/mp4 | .mp4 |
image/png | .png |
application/json | .json |
application/pdf |
ContentProvider如何共享数据
ContentProvider
通过URI
来标识其他应用要访问的数据,而ContentResolver
通过URI
来定位自己要访问的数据,然后通过ContentResolver
的增、删、改、查方法实现对共享数据的操作。还可以注册ContentObserver
来监听数据是否发生了变化来对应的刷新页面。
UriMatcher类
UriMatcher
类是一个工具类,帮助匹配ContentProvider
中的Uri
。只提供了两个方法–addURI()
和match()
方法。
private final static String AUTHORITY = "com.android.irving.provider";
private final static int STUDENT_URI_CODE = 0;
private final static UriMatcher sUriMatcher;