Intent IntentFilter小结
action,category 都可以自定义String类型, category中Manifest中必须设置Default
注意进行非空判断
if (intent.resolveActivity(packageManager)!=null) {
startActivity(intent)
}
代码设置
Intent().apply {
setAction("")
addCategory("")
setDataAndType(Uri.parse(""),"")
}
不能直接使用 intent.categories.add("") 会报错,categories 没有初始化
匹配细节
action 匹配规则: Intent为子集,可以为空集,如果存在,必须匹配manifest
匹配规则: 非必要(如果有date匹配成功,也可以使用),Manifest多个action,Intent中只有一个,但只要匹配一个,则视为通过
常用action
Intent.ACTION_MAIN:APP程序的开始
Intent.ACTION_VIEW:用于显示用户的数据。
比较通用,会根据用户的数据类型打开相应的Activity。
比如 tel:13400010001 打开拨号程序, www.g.cn 则会打开浏览器等。
Intent.Action_CALL:呼叫指定的电话号码,数据格式为:tel:+phone number,如果没有数据,唤起拨号界面
category 匹配规则, Intent是Manifest的子集
Intent中设置的category 必须与Intent filter中相匹配
data 匹配规则
data 表示该组件可以支持的数据格式与类型。
同样,一个过滤器也可以有多个 data:
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http" ... />
<data android:mimeType="audio/mpeg" android:scheme="http" ... />
...
</intent-filter>
一个 data 由两部分组成:
- mimeType
- scheme
mimeType 指的是支持的数据类型与格式,常见的有:
- text/plain
- image/jpeg
- video/*
- audio/*
/ 号前面的是数据类型,后面是具体格式。
scheme 就是常见的 URI 格式:
<scheme>://<host>:<port>/<path>
具体部分介绍及重要性如下:
- scheme: 协议类型
- 最重要,协议类型决定了如何访问数据,比如是本地还是网络
- host: 主机
- 第二重要,主机地址决定了具体 ip
- port:端口
- 第三重要,一个主机可能有多个网卡端口,有了端口后才能访问到具体
- path:具体路径
-
最后一级,表示要访问的文件夹路径
-
参考文档: