icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础内容

  • AndroidCore

    • Activity

    • BroadcastReceiver

    • ContentProvider

    • Android-Service

    • Intent

      • Intent属性详解
      • Intent与IntentFilter
        • Intent的Flag
    • Android UI

    • Components

    • Fragment

    • 网络操作

    • 异步机制

    • 数据存储

    • 学习笔记

    • 自定义View

    • View事件体系

    • Android
    • AndroidCore
    • Intent
    iqqcode
    2021-04-27
    目录

    Intent与IntentFilter

    # 1. IntentFilter

    IntentFilter表示“意图过滤器”。用于使用隐式Intent的过滤,对匹配的放行,不匹配的则过滤

    通常在AndroidManifest.xml文件中,系统组件的节点下配置:

    image-20210302153129689

    在一些应用场景中,也可能使用程序代码配置IntentFilter,例如在广播接收者在应用中。

    IntentFilter对Intent的以下属性是有效的:

    • Action
    • Catetory
    • Data

    # 2. 过滤Action

    每个IntentFilter可以添加多个Action,Intent中传入ONE、TWO、THREE任一个均可跳转

    image-20210302155059497

    每个action节点中name属性的值可以由开发人员自行指定,在同一个Android设备中,action的值应该是不冲突的,因此,该值通常以项目包名作为前缀。

    • 每个IntentFilter都应该至少指定一个Action,否则将阻止所有Intent
    • 如果Intent对象没有指定Action属性,将不参与匹配校验
    • 如果Intent对象指定的Action属性与IntentFilter中任意一个Action匹配,则放行

    # 3. 过滤Category

    每个IntentFilter可以添加多个Category

    image-20210302155711273

    与action节点相同,category节点中name属性的值也可以由开发人员指定,且应该是不会发生冲突的

    开发人员可以不为Intent对象指定Category,也可以指定多个Category。Android系统必然会为每个Intent对象添加默认的Category,即:android.intent.category.DEFAULT

    在过滤规则中,Intent中的每个Category在IntentFilter中都能被找到,则放行,否则将阻止,即,放行的条件为:

    • IntentFilter中有默认的Category;
    • IntentFilter中的Category,对比Intent中的Category,只能多,不能少。

    # 4. 过滤Data

    每个IntentFilter可以添加多个Data

    image-20210302160444380

    • android:mimeType属性中指定MIME类型时,可以使用通配符,例如:text/*、 video/*等。

    • 每个URI的完整格式为:scheme://host:port/path

    在IntentFilter中配置Data时,以属性都是可选的,但它们相互并不独立

    # URI是否匹配(只匹配指定的字段)

    • 如果在IntentFilter中仅指定了scheme,则任意相同scheme的Uri均匹配,无视host、port、path部分;
    • 如果在IntentFilter中指定了scheme 和 host,则任意相同scheme和host的Uri均匹配,无视port、path部分;
    • 如果在IntentFilter中指定了scheme、host、port,则任意相同scheme、host、port的Uri均匹配,无视path部分;
    • 如果在IntentFilter中指定了完整的Uri各部分,则要求被验证的Uri也完全匹配

    # Data过滤规则

    Data的两个重要属性:Uri 和 MIME,IntentFilter中根据Uri可以推断出MIME

    【过滤时】:Intent对象必须和IntentFilter中指定的属性保持一致则放行

    • 如果Intent没有指定Uri和MIME,仅当IntentFilter也没有指定Uri和MIME时放行;
    • 如果Intent中指定了Uri,但没有指定MIME,且根据Uri无法推断MIME,仅当IntentFilter指定了相同的Uri且没有指定MIME时放行;
    • 如果Intent中没有指定Uri,但指定了MIME,仅当IntentFilter也没有指定Uri且指定了相同的MIME时放行;
    • 如果Intent中同时指定了Uri和MIME,仅当IntentFilter中也指定了相同的Uri和MIME时放行,或IntentFilter中没有指定MIME,但根据Uri可以推断出MIME时放行

    # 小结

    IntentFilter可以指定Action、Category、Data来检验是否匹配,匹配的Intent将放行,否则阻止

    【放行规则如下】

    • Action:Intent对象中的Action(最多一个),在IntentFilter中可被找到
    • Category:Intent对象中所有的Category在IntentFilter中都可以找到,且Intent对象中必然有android.intent.category.DEFAULT这个Category
    编辑 (opens new window)
    #intent
    上次更新: 2022/03/27, 22:58:50
    Intent属性详解
    Intent的Flag

    ← Intent属性详解 Intent的Flag→

    最近更新
    01
    匿名内部类
    10-08
    02
    函数式接口
    10-08
    03
    ARouter-Kotlin踩坑
    10-05
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×