目录
5.Android应用核心Intent(二)
3.Intent过滤器
使用隐式Intent启动Activity时,并没有在Intent中指明Activity所在的类。因此,Android 系统要根据某种匹配机制找到要启动的Activity。这种机制就是由Intent过滤器来实现的。
注: Intent 过滤器是一种根据Intent中的Action、Data 和Category等属性对适合接收该Intent的组件进行匹配和筛选的机制。
为了使组件能够注册Intent过滤器,通常在AndroidManifest.xml文件的各个组件声明标记中,使用<intent-filter>标记声明该组件所支持的动作、数据和种类等信息。当然,也可以在程序代码中,使用Intent对象提供的对应属性的方法来进行设置。在<intent-filter>标记中,用于设置Action属性的标记为<action>;用于设置Data属性的标记为<data>;用于设置Category属性的标记为<category>。
3-1.配置<action>标记
<action>标记用于指定组件所能响应的动作,以字符串形式表示,通常由Java类名和包的完全限定名组成。<action> 标记的语法格式如下:
<action android:name="string" />
其中,string 为字符串,可以是表5.1中的“对应字符串”列的内容,但不能直接使用类常量。例如,要设置其作为初始启动Activity(对应常量为ACTIONMAIN),那么需要将其指定为android.intet.action.MAIN。代码如下:
<action android:name= "android.intent.action.MAIN" />
除了使用标准的Action常量外,还可以自定义action的名字,为了确保名字的唯一性,一定要用该应用程序的包名作为前缀。例如,要设置名字为“DETAIL”,可以使用下面的代码:
<action android:name="com.example.action.DETAIL"/>
3-2.配置<data>标记
<data>标记用于向Action提供要操作的数据。它可以是一个URI对象或者数据类型(MIME媒体类型)。其中,URI可以分成scheme (协议或服务方式)、host (主机)、port (端口)以及path (路径)等,格式如下:
<scheme>://<host>:<port>/<path>
例如下面的URI:
content://com.example.project:200/folder/subfolder/etc
其中,content 是scheme;com.example.project是host;200 是port;folder/subfolder/etc 是path。 host和port一起组成了URI授权,如果host没有指定,则忽略post。这些属性都是可选的,但是相互之间并非完全独立。如果授权有效,则scheme必须指定; 如果path有效,则scheme 和授权必须指定。
<data>标记的语法格式如下:
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:mimeType="string" />
◆android:scheme:用于指定所需要的特定协议。
◆android:host:用于指定一个有效的主机名。
◆android:port:用于指定主机的有效端口号。
◆android:path:用于指定有效的URI路径名。
◆and