:匹配的任意长度的任何有效字符的字符串。
#:匹配的任意长度的数字字符的字符串。
如:
content://com.example.app.provider/
匹配provider的任何内容url
content://com.example.app.provider/table3/#
匹配table3的所有行
####MIME
MIME是指定某个扩展名的文件用一种应用程序来打开,就像你用浏览器查看PDF格式的文件,浏览器会选择合适的应用来打开一样。Android中的工作方式跟HTTP类似,ContentProvider会根据URI来返回MIME类型,ContentProvider会返回一个包含两部分的字符串。MIME类型一般包含两部分,如:
text/html
text/css
text/xml
application/pdf
分为类型和子类型,Android遵循类似的约定来定义MIME类型,每个内容类型的Android MIME类型有两种形式:多条记录(集合)和单条记录。
集合记录:
vnd.android.cursor.dir/自定义
单条记录:
vnd.android.cursor.item/自定义
vnd表示这些类型和子类型具有非标准的、供应商特定的形式。Android中类型已经固定好了,不能更改,只能区别是集合还是单条具体记录,子类型可以按照格式自己填写。
在使用Intent时,会用到MIME,根据Mimetype打开符合条件的活动。
下面分别介绍Android系统提供了两个用于操作Uri的工具类:ContentUris和UriMatcher。
####ContentUris
ContetnUris包含一个便利的函数withAppendedId()来向URI追加一个id。
Uri uri = Uri.parse(“content://cn.scu.myprovider/user”)
Uri resultUri = ContentUris.withAppendedId(uri, 7);
//生成后的Uri为:content://cn.scu.myprovider/user/7
同时提供parseId(uri)方法用于从URL中获取ID:
Uri uri = Uri.parse(“content://cn.scu.myprovider/user/7”)
long personid = ContentUris.parseId(uri);
//获取的结果为:7
####UriMatcher
UriMatcher本质上是一个文本过滤器,用在contentProvider中帮助我们过滤,分辨出查询者想要查询哪个数据表。
举例说明:
- 第一步,初始化:
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
- 第二步,注册需要的Uri:
//USER 和 USER_ID是两个int型数据
matcher.addURI(“cn.scu.myprovider”, “user”, USER);
matcher.addURI(“cn.scu.myprovider”, “user/#”,USER_ID);
//如果match()方法匹配content://cn.scu.myprovider/user路径,返回匹配码为USER
- 第三部,与已经注册的Uri进行匹配:
/*
-
如果操作集合,则必须以vnd.android.cursor.dir开头
-
如