Android开发之Intent Filter

一、概述

Intent Filter 在平常的开发中很常见。如果Intent是对在某个数据集上执行的动作的请求,那么Android是如何知道使用哪一个应用程序或者组件来响应这个请求的呢?使用Intent Filter,应用程序组件可以声明它们支持的动作和数据。

要把一个Activity或者Service注册为一个可能的Intent处理程序,可以在它的manifest节点中添加一个intent-filter标签并使用下面的标签以及相关的属性。


二、intent-filter标签及其相关属性

1. action 使用android:name属性指定要为之服务的动作的名称。每个Intent Filter必须要有至少一个action标签。Action是一个描述性的唯一的字符串。所以最好使用基于java包命名约定的命名系统。

2. category 使用Android:name属性来指定应该在哪种情况下为action提供服务。每个Intent Filter标签都可以包含多个category标签。既可以指定自己的category也可以使用以下Android提供的标准值。

① ALTERNATIVE  可以把这个动作指定为在特定数据类型上执行的默认的动作的可选项。例如,一个联系人的默认动作是查看其信息,而可选的动作是编辑。


② SELECTED_ ALTERNATIVE  与ALTERNATIVE类似,但是ALTERNATIVE总是将描述的intent resolution解析为一个动作,而当要求有很多种可能性的时候,则可以使用

SELECTED_ALTERNATIVE。


③ BROWSABLE  指定一个在浏览器内部可用的动作。当一个Intent在浏览器内部触发的时候,它总是会包含BROWSABLE 类别。如果想让应用程序响应浏览器内触发的动作(例如,截获指向特定网站的链接),那么必须包含BROWSABLE。


④ DEFAULT  通过设置这个类型可以使一个组件成为Intent Filter内指定的数据类型的默认动作。对于那些使用一个显式的intent启动的activity,这个类型很有必要,是必须要加的。


⑤ HOME  通过将一个intent filter的类别设置为HOME,而不指定一个action,就可以把它作为本地屏幕的可选项。


⑥ LAUNCHER  这个是几乎所有开发的应用都会使用的属性。<categoryandroid:name="android.intent.category.LAUNCHER"/>这代码的作用就是让一个Activity(图标)出现在系统的应用程序的列表中。一般和<actionandroid:name="android.intent.action.MAIN"/>配合使用,这句代码的作用是让该Activity作为程序的入口。


3. data  data标签允许指定组件可以执行的数据类型。更具情况,也可以包含多个数据标签。可以使用以下属性的任意组合来指定你的组件所支持的数据。

① android:host  指定一个主机名(如baidu.com)

② android:mimeType 指定组件可以执行的数据类型。例如<dataandroid:mimeType="image/*"/>,将匹配所有图标文件。

③ android:path 指定匹配的URI的有效路径值(如/file/boats/)

④ android:port 指定主机的有效端口。

⑤ android:scheme 要求一种特定的模式(如content,http,https等)


有时候我们在浏览器中浏览一些网站的时候,如果本机安装了对应门户网站的app,当我们点击浏览器页面中的连接时会弹出一个选择是否打开app来阅读的弹出框。其实就是app中组件配置了对应的属性配置。如下面一段代码:

<intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />

       <data
        android:host="www.oschina.net"
        android:scheme="http" />
</intent-filter>

当我们在手机浏览器中浏览oschina官网时候点击其中的连接的时候就会弹出提示你打开oschina的app。








你可能感兴趣的:(android,intent-filter)