1、要把一个Activity或者Service注册为一个可以接受隐式intent的处理程序,需要在它的manifest节点中添加一个intent-filter标签。
2、intent-filter标签包含的属性:
intent-filter包含action,category,data三大属性。在隐式intent发布时,这些属性将与这个intent进行匹配,匹配的结果将决定那个(些)处理程序将会被调用。
2.1 action
每个Intent Filter必须要包含至少一个action标签。Action的android:name属性指定需要处理的动作名称。这个名称应该是唯一的描述性字符串,推荐的做法是借鉴java包名约定来命名Action。
2.2 category(类别)
category使用android:name属性来指定在什么情况下为intent提供服务。每个Intent Filter可以有多个category标签。既可以指定自己的category也可以使用Android提供的标准值。
这些标准值有:
LAUNCHER:监听这个Intent Filter的Activity会出现在应用程序的启动器中。
HOME:监听这个Intent Filter的处理程序可以作为本地屏幕的可选项。
BROWSABLE:监听这个Intent Filter的处理程序将可以处理一个来自浏览器内部的动作。
ALTERNATIVE:为特定动作提供默认的操作。
SELECTED_ALTERNATIVE:
2.3 data
隐式intent用于匹配intent-filter的数据类型,这些数据类型有:
android:host、android:mimetype、android:path、android:port、android:scheme
例如我们在点击一段下载链接时,到底是触发浏览器还是触发迅雷下载软件,这个就是由data标签来实现的。
3、intent-filter的匹配过程
在使用隐式intent来启动可能的处理程序时,这个intent将会和所有已经在Android操作系统注册过的intent-filter有一个匹配过程。这个匹配过程将会找出符合要求的最合适的处理程序来处理这个隐式intent。
step1:隐式intent的action name必须与intent-filter的action name相同,否则匹配失败
step2:隐式intent的category只能是intent-filter的子集,否则匹配失败
step3:data里面的数据必须逐项完全相同,否则匹配失败
step4:如果有多个处理程序的intent-filter同时匹配这个隐式intent,