`

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>  

 

 

分享到:
评论

相关推荐

    显式和隐式、过滤器intent的使用

    显式Intent通过指定目标组件进行直接调用,而隐式Intent则依赖于Intent Filter的匹配来寻找合适的响应者。熟练掌握这两种Intent以及Intent Filter的使用,对于开发高效且可扩展的Android应用至关重要。通过学习和...

    Android的Intent实验

    - 隐式Intent: 不指定目标组件,而是通过动作和数据来寻找能处理该Intent的组件。这种方式可以跨应用通信,增加了系统的开放性和互操作性。 4. **Intent的附加信息** - `putExtra()`: 用于添加额外的数据到Intent...

    android中使用隐式intent完成应用的步骤及核心代码2022优秀文档.pptx

    4. 启动 Activity:使用隐式 Intent 启动 Activity,Android 系统将根据 Intent 的请求内容和 Intent Filter 比较,找到匹配的 Activity。 核心代码: 在 MainActivity 中: ```java Intent intent = new Intent()...

    android中intent使用示例

    在AndroidManifest.xml中,我们可以为Activity或Service定义Intent Filter,以响应特定的隐式Intent。例如,为了响应上面的Web浏览Intent,我们可以在Activity声明中添加: ```xml &lt;intent-filter&gt; &lt;action ...

    显示Intent和隐式Intent启动Activity的示例

    当使用隐式Intent时,目标Activity需要设置Intent Filter来表明它可以响应哪种类型的Intent。在AndroidManifest.xml中定义Intent Filter如下: ```xml &lt;activity android:name=".TargetActivity"&gt; &lt;intent-...

    android中隐式intent的使用说明2022优秀文档.pptx

    在 Android 中使用隐式 Intent 需要在 AndroidManifest.xml 文件中,首先被调用的 Activity 要有一个带有 `&lt;intent-filter&gt;` 并且包含 `&lt;action&gt;` 的 Activity,设定它能处理的 Intent,并且 category 设为默认值。...

    Android中Intent的详解(显式,隐式,系统,startActivityForResult);

    隐式Intent不直接指定目标组件,而是通过设定Action、Data、Category等元数据来描述一个操作,然后系统会遍历所有注册过的Intent Filter,找到最适合处理这个Intent的组件。这种方式允许不同应用之间的组件互相调用...

    Android Studio 实验二:Intent的使用

    在AndroidManifest.xml中,为组件定义Intent Filter,使得组件可以响应隐式Intent: ```xml &lt;activity android:name=".MyActivity"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; ...

    android中隐式intent与activity的匹配原则2022优秀文档.pptx

    Android中隐式Intent与Activity的匹配原则2022优秀文档 Android中隐式Intent与Activity的匹配原则是Android系统中的一种机制,用于在Activity之间进行通信和交互。隐式Intent是一种非显式的Intent,可以不指定具体...

    android intent 代码

    显式Intent用于指定要启动的确切组件(Activity或Service),而隐式Intent则是向系统广播一个行动请求,任何符合Intent过滤器的组件都可以响应。 2. 创建Intent 创建Intent非常简单,你可以使用`new Intent()`构造...

    android Intent的用法

    而隐式Intent则是不指定具体组件,而是通过Action、Data、Category等元数据来匹配系统中能够处理该Intent的组件。 1. 显式Intent的使用: - 创建Intent实例:`Intent intent = new Intent(context, TargetActivity...

    Intents 和Intent filter 理论介绍

    显式 Intent 直接指定了目标组件的名称,而隐式 Intent 则不指定,而是通过 Intent Filter 来匹配合适的组件。 2. Intent 对象 Intent 对象包含了以下关键信息: 2.1 组件名字:可选,用于指定目标组件的具体类名...

    Android应用源码之Intent1_Intent.zip

    当发送一个隐式Intent时,系统会遍历所有注册的组件,根据Intent Filter进行匹配,选择最合适的组件来处理Intent。 总结,Intent1_Intent.zip中的源码可能涵盖了Intent的基本使用、数据传递、Intent Filter配置...

    Android中使用隐式Intent完成界面切换的代码清单.pdf

    通过这个简单的示例,我们可以了解如何在Android应用中使用隐式Intent进行界面间的切换。实际开发中,隐式Intent还常用于启动其他组件如Service、BroadcastReceiver,或者执行系统提供的操作如打开网页、发送短信等...

    Android中Intent使用、数据回写(显)

    - 为了响应隐式Intent,需要在AndroidManifest.xml中为组件定义IntentFilter,声明ACTION、CATEGORY、DATA等。 - 例如,一个能处理URL的Activity可能需要这样的IntentFilter: ```xml &lt;activity android:name="....

    Android应用源码之Intent_Intent.zip

    而隐式Intent则不指定具体组件,而是通过Action、Data、Category等元数据来定义一个操作,允许任何能够处理该操作的组件响应。 2. **Intent的构造** - `Intent(String action)`:创建一个具有特定动作的Intent。 ...

    Android 隐式Intent的实例详解

    Android 隐式Intent 的实例详解还可以帮助我们更好地理解隐式Intent 的机制和应用场景,从而更好地使用隐式Intent 来实现我们的需求。 Android 隐式Intent 的实例详解还可以帮助我们更好地理解 Android 的意图...

Global site tag (gtag.js) - Google Analytics