intent-filter使用简介

Activity的启动方式有显式和隐式。显式需要指定被启动对象的组件信息,比如类名。隐式不需要指定组件信息,但需要Intent能够匹配目标Activity的intent-filter中所设置的过滤信息,如果匹配成功了才能启动目标Activity。

1.那么怎样才是匹配intent-filter成功了呢?

总的来说只要满足以下3点就是匹配intent-filter成功了:

  • 一个Activity中可以有多组intent-filter,一个Intent只要匹配任何一组intent-filter就算匹配成功。

  • 一个intent-filter中可以有多个action,category,data并各自构成不同类别。

  • 一个Intent必须同时匹配action类别,category类别和data类别才算完全匹配。

2.那么如何来匹配action,category,data呢?

(1)action

  • 系统默认定义了一些action。
    如:<action android:name="android.intent.action.MAIN"/>
  • 可以自定义action。
  • action是一个字符串。
  • Intent必须存在action,且只有一个action。
  • Intent只能设置一个action,后面设置的action会覆盖之前设置的action。
  • intent-filter中可以同时有多个action,Intent只需要匹配intent-filter中的一个action即可。

(2)category

  • 系统默认定义了一些category。
    <category android:name="android.intent.category.LAUNCHER"/>
  • 可以自定义category。
  • category是一个字符串。
  • Intent中可以不设置category,这个时候在使用startActivity或者startActivityForResult的时候,系统自动会为你添加默认category(android.intent.category.DEFAULT)。
  • intent-filter中必须添加“android.intent.category.DEFAULT”这个过滤条件。(切记)
  • Intent中可以同时设置多个category,一旦设置多个catrgory,那么每个category都必须能够和intent-filter中的某个category匹配成功。
  • 只通过category匹配是无法匹配到Activity的。因为category属性是一个执行Action的附加信息。

(3)data

总结:

每个Activity可以定义专属于自己的intent-filter,在隐式启动activity时可以模糊定位多个activity或者精准定位一个activity。模糊定位多个activity时,弹出选择框供用户选择。精准定位一个actvity则直接跳转。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容