Intent 背后的 Intent Filter

若是 Intent 是对在某个数据集上执行的动做的请求,那么 Android 是如何知道使用哪一个应用程序来响应这个请求的呢?使用 Intent Filter,应用程序能够声明他们支持的动做和数据。Intent Filter 提供了对 Intent 的拦截过滤,只有匹配上 Intent Filter 的应用程序组件,才可以对 Intent 形成响应。android

要把一个 Activity 和 Service 注册成为一个可以处理 Intent 的程序,那么须要在它的 manifest 节点中添加 Intent Filter 标签。如下是相关属性介绍:浏览器

  • action 每一个 Intent Filter 标签至少有一个 action 标签来描述动做名称。
  • category 包含哪一种触发状态,一个动做下能够指定不一样的处理动做目录的条件。例如:联系人 Actin 能够查看也能够修改。下面包含集中 Android 提供的服务,也能够自定义code

    • ALTERNATIVE
    • SELECTED_ALTERNATIVE
    • BROWSABLE 基于浏览器内部的,在浏览器内部触发的 Intent 都会包含一个 BROWSABLE,因此想让指定的应用程序组件匹配到这个 Intent 必需要包含一个 BROWSABLE
    • DEFAULT 默认动做,对于显示调用的 Intent 颇有必要
    • HOME 能够将 Intent Filter 的类别设置为 HOME,能够不指定 action
    • LAUNCHER 能够在应用程序启动器下显示
  • datait

  • android:host
  • android:mimetype
  • android:path
  • android:port
  • android:scheme


Android 是如何解析 Intent Filter的

  1. Android 会将已安装包的可用的 Intent Filter 放到一个列表中
  2. 首先匹配 action 和 category,intent filter 必需要包含 intent 中全部的 category,否则匹配失败
  3. scheme、host、port、path、mimetype 都须要匹配一致
  4. 当隐式启动 Activity 时,若是解析出多个组件,那么全部的组件都会呈现城一个列表给用户。
相关文章
相关标签/搜索