<intent-filter> <data android:mimeType="video/mpeg" android:scheme="http" ... /> <data android:mimeType="audio/mpeg" android:scheme="http" ... /> ... </intent-filter>
每个<data />标签都可以指定一个URI结构以及data的MIME类型。一个完整的URI由scheme、host、port和path组成,其结构如下所示:
<scheme>://<host>:<port>/<path>
其中scheme既可以是Android中常见的协议,也可以是我们自定义的协议。Android中常见的协议包括content协议、http协议、file协议等,自定义协议可以使用自定义的字符串。
-
如下是一个content协议的URI:
content://com.example.project:200/folder/subfolder/etc
在该URI中,scheme是content,host是com.example.project,port是200,path是folder/subfolder/etc。-
如下是一个自定义协议的URI:
ispring://blog.csdn.net/sunqunsunqun
在该URI中,scheme是ispring,host是blog.csdn.net,没有明确设定port,path是sunqunsunqun。组成URI的这些属性在<data />标签中都是可选的 ,但存在如下的依赖关系:
- 如果没有指定scheme,那么host参数会被忽略
- 如果没有指定host,那么port参数会被忽略
-
如果scheme和host都没有指定,path参数会被忽略
当我们将intent对象中的Uri参数与intent-filter中的<data />标签指定的URI格式进行对别时,我们我们只对比intent-filter的<data />标签指定的部分,例如:
如果intent-filter中只指定了scheme,那么所有带有该sheme的URI都能匹配到该intent-filter。
如果intent-filter中只指定了scheme和authority(authority包括host和port两部分)而没有指定path,那么所有具有相同scheme和authority的URI都能匹配到该intent-filter,而不用考虑path为何值。
-
如下是一个自定义协议的URI:










