Android使用Intent Filter来响应隐式Intent

本文详细介绍了Android中的IntentFilter机制,解释了它是如何帮助组件声明能够处理特定Intent的能力,并展示了如何通过配置文件来指定支持的动作、类别及数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://justjavac.javaeye.com/blog/698026

 

    如果一个 Intent 请求在一片数据上执行一个动作, Android 如何知道哪个应用程序(和组件)能用来响应这个请求呢? Intent Filter就是 用来注册 Activity Service Broadcast Receiver 具有能在某种数据上执行一个动作的能力。

    使用 Intent Filter ,应用程序组件告诉 Android ,它们能为其它程序的组件的动作请求提供服务,包括同一个程序的组件、本地的或第三方的应用程序。为了注册一个应用程序组件为 Intent 处理者,在组件的 manifest 节点添加一个 intent-filter 标签。

    在 Intent Filter 节点里使用下面的标签(关联属性),你能指定组件支持的动作、种类和数据:

 action

使用 android:name 特性来指定对响应的动作名。动作名必须是独一无二的字符串,所以,一个好的习惯是使用基于 Java 包的命名方式的命名系统。

 category

使用 android:category 属性用来指定在什么样的环境下动作才被响应。每个 Intent Filter 标签可以包含多个 category 标签。你可以指定自定义的种类或使用 Android 提供的标准值,如下所示:

 

 ALTERNATIVE

你将在这章的后面所看到的,一个 Intent Filter 的用途是使用动作来帮忙填入上下文菜单。 ALTERNATIVE 种类指定,在某种数据类型的项目上可以替代默认执行的动作。例如,一个联系人的默认动作时浏览它,替代的可能是去编辑或删除它。

 SELECTED_ALTERNATIVE

ALTERNATIVE 类似,但 ALTERNATIVE 总是使用下面所述的 Intent 解析来指向单一的动作。SELECTED_ALTERNATIVE在需要一个可能性列表时使用。

 

 BROWSABLE

指定在浏览器中的动作。当 Intent 在浏览器中被引发,都会被指定成 BROWSABLE 种类。

 

 DEFAULT

设置这个种类来让组件成为 Intent Filter 中定义的 data 的默认动作。这对使用显式 Intent 启动的 Activity 来说也是必要的。

 

 GADGET

通过设置 GADGET 种类,你可以指定这个 Activity 可以嵌入到其他的 Activity 来允许。

 

 HOME

HOME Activity 是设备启动(登陆屏幕)时显示的第一个 Activity 。通过指定 Intent Filter HOME 种类而不指定动作的话,你正在将其设为本地 home 画面的替代。


 LAUNCHER

使用这个种类来让一个 Activity 作为应用程序的启动项。

 data

data 标签允许你指定组件能作用的数据的匹配;如果你的组件能处理多个的话,你可以包含多个条件。你可以使用下面属性的任意组合来指定组件支持的数据:

 

 android:host

指定一个有效的主机名(例如, com.google )。

 

 android:mimetype

允许你设定组件能处理的数据类型。例如,<type android:value=”vnd.android.cursor.dir/*”/>能匹配任何 Android 游标。

 

 android:path

有效地 URI 路径值(例如, /transport/boats/ )。

 

 android:port

特定主机上的有效端口。

 

 android:scheme

需要一个特殊的图示(例如, content http )。

 

接下来的代码片段显示了如何配置 Activity Intent Filter ,使其以在特定数据下的默认的或可替代的动作的身份来执行 SHOW_DAMAGE动作。(创建地震内容将在下一章节。)

 

  1. <activity android:name=”.EarthquakeDamageViewer”  android:label=”View Damage”>  
  2.         <intent-filter>  
  3.               <action  android:name=”com.paad.earthquake.intent.action.SHOW_DAMAGE” /> 
  4.               <category android:name=”android.intent.category.DEFAULT” />
  5.               <category android:name=”android.intent.category.ALTERNATIVE_SELECTED” />  
  6.               <data android:mimeType=”vnd.earthquake.cursor.item/*” />  
  7.         </intent-filter>  
  8. </activity> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值