Intent 、IntentFilter小结

185 阅读2分钟

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:具体路径
    • 最后一级,表示要访问的文件夹路径

参考文档:

java - Intent以及IntentFilter详解 - bbbb的专栏 - SegmentFault 思否