`

Android使用Intent Filter来响应隐式Intent

阅读更多

如果一个Intent请求在一片数据上执行一个动作,Android如何知道哪个应用程序(和组件)能用来响应这个请求呢?Intent Filter就是用来注册ActivityServiceBroadcast 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 FilterHOME种类而不指定动作的话,你正在将其设为本地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

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

 

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

 

Java代码 
  1. <activity android:name=”.EarthquakeDamageViewer”  
  2.   
  3. android:label=”View Damage”>  
  4.   
  5. <intent-filter>  
  6.   
  7. <action  
  8.   
  9. android:name=”com.paad.earthquake.intent.action.SHOW_DAMAGE”>  
  10.   
  11. </action>  
  12.   
  13. <category android:name=”android.intent.category.DEFAULT”/>  
  14.   
  15. <category  
  16.   
  17. android:name=”android.intent.category.ALTERNATIVE_SELECTED”  
  18.   
  19. />  
  20.   
  21. <data android:mimeType=”vnd.earthquake.cursor.item/*”/>  
  22.   
  23. </intent-filter>  
  24.   
  25. </activity>  

 

 

分享到:
评论

相关推荐

    详解Android中Intent对象与Intent Filter过滤匹配过程

    如果对Intent不是特别了解,可以参见博文《详解Android中Intent的使用...我们知道,Intent是分两种的:显式Intent和隐式Intent。如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否则

    Android解析Intent Filter的方法

    和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。   决定哪个Activity来...

    《Android高级编程》

    5.1.1 使用Intent来启动活动 5.1.2 使用Intent Filter来为隐式Intent提供服务 5.1.3 使用Intent Filter作为插件和扩展 5.1.4 使用Intent来广播事件 5.2 Adapter简介 5.2.1 Android提供的部分Adapter简介 5.2.2 使用...

    Android高级编程.pdf

    5.1.2 使用Intent Filter来为隐式Intent提供服务 5.1.3 使用Intent Filter作为插件和扩展 5.1.4 使用Intent来广播事件 5.2 Adapter简介 5.2.1 Android提供的部分Adapter简介 5.2.2 使用Adapter绑定数据 5.3 使用...

    Android高级编程 part1

     5.1.2 使用Intent Filter来为隐式Intent提供服务  5.1.3 使用Intent Filter作为插件和扩展  5.1.4 使用Intent来广播事件  5.2 Adapter简介  5.2.1 Android提供的部分Adapter简介  5.2.2 使用Adapter绑定数据 ...

    Android高级编程 part2

     5.1.2 使用Intent Filter来为隐式Intent提供服务  5.1.3 使用Intent Filter作为插件和扩展  5.1.4 使用Intent来广播事件  5.2 Adapter简介  5.2.1 Android提供的部分Adapter简介  5.2.2 使用Adapter绑定数据 ...

    Android高级编程--源代码

    5.1.2 使用Intent Filter来为隐式Intent提供服务 121 5.1.3 使用Intent Filter作为插件和扩展 129 5.1.4 使用Intent来广播事件 132 5.2 Adapter简介 135 5.2.1 Android提供的部分Adapter简介 135 5.2.2 使用...

    隐式意图启动系统各种功能

    这是通过隐式意图调用安卓系统的各个功能,比如通过隐式意图进入无线网络设置界面,等等。至于最基本的,在intent-filter 里设置启动条件,这里没有给出。

    深入浅出Google Android 第5章

    第 5 章 我要打电话——电话...5.3.3 使用 Intent Filter 的拨号程序 5.4 用 Intent 实现一个简单的短信程序 5.4.1 创建 TinySMS界面 5.4.2 设置权限 5.4.3 发送短信 5.5 Android 中电话和短信服务的包 5.6 小结

    Android 中IntentFilter的匹配规则实例详解

    假如我们要隐式启动一个Activity我们需要成功匹配activity中的任意一个intent-filter。如果要成功匹配该intent-filter我们需要完全匹配该intent-filter中的 action、category、data。 示例: &lt;activity android:name...

    萌新Android笔记—-IntentFilter匹配篇

    原则上一个Intent不能即是显式调用又是隐式调用,两者真共存的话以显式调用为主。 显式调用: 需要明确指定被启动对象的组件信息,包括包名和类名。例如: Intent intent = new Intent(Mainactivity.this,...

    Android应用程序开发实验内容.doc

    7、8班:2015.5.5 【实验目的和要求】 1、掌握Intent和Intent Filter工作原理 2、掌握Android平台下本地数据库存储技术 3、掌握Android平台下远程数据库访问技术 4、掌握线程的启动、挂起和停止方法 5、掌握跨线程的...

Global site tag (gtag.js) - Google Analytics