Android提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。

UriMatcher类

用于匹配Uri,它的用法如下

  • 首先第一步注册需要匹配Uri路径:

eg.

1
2
3
4
5
6
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://net.yrom.provider.noteprovider/note路径,返回匹配码为1
sMatcher.addURI( "net.yrom.provider.noteprovider", "note", 1); //添加需要匹配 uri,如果匹配就会返回匹配码
//如果match()方法匹配content://net.yrom.provider/note/230路径,返回匹配码为2
sMatcher.addURI( "net.yrom.provider", "note/#", 2); //#号为通配符

  • 注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配
    如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,可以针对各个匹配码进行switch-case操作:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    switch (sMatcher.match(Uri.parse( "content://net.yrom.provider.noteprovider/note/10"))) {
    case 1:
    //匹配1的操作
    break;
    case 2:
    //匹配2的操作
    break;
    default: //不匹配
    break;
    }

ContentUris类

用于处理Uri路径后面的ID部分

  • 方法withAppendedId(uri, id)用于为路径加上ID部分:

    1
    2
    Uri uri1 = Uri.parse("content://net.yrom.provider.noteprovider/note");
    Uri resultUri = ContentUris.withAppendedId (uri1, 10);

    生成后的Uri为:content://net.yrom.provider.noteprovider/note/10

  • 方法parseId(uri)方法用于从路径中获取ID部分:

    1
    2
    Uri uri2 = Uri.parse("content://net.yrom.provider.noteprovider/note/10");
    long personid = ContentUris.parseId(uri2);

    获取的结果为:10