Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
intent-filter_kotlin协程详解,希望能够帮助你!!!。
IntentFilter可以理解为Intent的过滤器,作用是在利用隐式Intent启动组件时过滤掉不匹配的组件,找到能够正确完成任务的组件。一个Intent想要通过IntentFilter,需要完成三项测试:操作测试、数据测试、类别测试。
一个组件可以拥有多个IntentFilter,但只需要通过其中之一即可启动该组件。
IntentFilter既可以在Manifest文件中利用<intent-filter>标签进行静态声明,也可以在代码中创建IntentFilter对象实现动态声明。
Android要求Service始终需要由显式Intent启动,因此不应当为Service组件声明IntentFilter。
要指定接受的 Intent 操作,IntentFilter既可以不声明任何 <action> 元素,也可以声明多个此类元素。
要指定接受的 Intent 类别,IntentFilter既可以不声明任何 <category>元素,也可以声明多个此类元素。
(1)URL结构与MIME数据类型
标准URL格式:<scheme>://<host>:<port>/<path>
例:content://com.example.project:200/folder/subfolder/etc
在此 URI 中,架构是 content,主机是com.example.project,端口是 200,路径是 folder/subfolder/etc。
(2)URL与IntentFilter匹配规则
要指定接受的 Intent 数据, Intent 过滤器既可以不声明任何 <data>元素,也可以声明多个此类元素。
<data>元素声明示例:<data android:mimeType="video/mpeg" android:scheme="http" ... />
每个<data>元素均可指定 URI 结构和数据类型(MIME 媒体类型)。 URI 的每个部分均包含单独的 scheme、host、port 和 path 。
在<data>元素中,上述每个属性均为可选,但存在线性依赖关系:
将 Intent 中的 URI 与过滤器中的 URI 规范进行比较时,它仅与过滤器中包含的部分 URI 进行比较。例如:
(3)数据测试具体规则
数据测试会将 Intent 中的 URI 和 MIME 类型与过滤器中指定的 URI 和 MIME 类型进行比较。 规则如下:
简而言之,数据测试以IntentFilter为核心,Intent的数据部分(URL、MIME)只有在IntentFilter的要求之内才能通过。IntentFilter未声明的话,Intent也不能有,否则就无法通过。唯一例外:第四条规则中,同时包含URL(content:或file:抬头)和MIME的Intent,若MIME匹配,且IntentFilter未定义URL的话就能匹配。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章