如果一个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动作。(创建地震内容将在下一章节。)
- <activity android:name=”.EarthquakeDamageViewer”
-
- android:label=”View Damage”>
-
- <intent-filter>
-
- <action
-
- android:name=”com.paad.earthquake.intent.action.SHOW_DAMAGE”>
-
- </action>
-
- <category android:name=”android.intent.category.DEFAULT”/>
-
- <category
-
- android:name=”android.intent.category.ALTERNATIVE_SELECTED”
-
- />
-
- <data android:mimeType=”vnd.earthquake.cursor.item/*”/>
-
- </intent-filter>
-
- </activity>
分享到:
相关推荐
显式Intent通过指定目标组件进行直接调用,而隐式Intent则依赖于Intent Filter的匹配来寻找合适的响应者。熟练掌握这两种Intent以及Intent Filter的使用,对于开发高效且可扩展的Android应用至关重要。通过学习和...
- 隐式Intent: 不指定目标组件,而是通过动作和数据来寻找能处理该Intent的组件。这种方式可以跨应用通信,增加了系统的开放性和互操作性。 4. **Intent的附加信息** - `putExtra()`: 用于添加额外的数据到Intent...
4. 启动 Activity:使用隐式 Intent 启动 Activity,Android 系统将根据 Intent 的请求内容和 Intent Filter 比较,找到匹配的 Activity。 核心代码: 在 MainActivity 中: ```java Intent intent = new Intent()...
在AndroidManifest.xml中,我们可以为Activity或Service定义Intent Filter,以响应特定的隐式Intent。例如,为了响应上面的Web浏览Intent,我们可以在Activity声明中添加: ```xml <intent-filter> <action ...
当使用隐式Intent时,目标Activity需要设置Intent Filter来表明它可以响应哪种类型的Intent。在AndroidManifest.xml中定义Intent Filter如下: ```xml <activity android:name=".TargetActivity"> <intent-...
在 Android 中使用隐式 Intent 需要在 AndroidManifest.xml 文件中,首先被调用的 Activity 要有一个带有 `<intent-filter>` 并且包含 `<action>` 的 Activity,设定它能处理的 Intent,并且 category 设为默认值。...
总结来说,创建一个使用隐式Intent的启动器应用涉及了对Intent过滤器的理解、Intent的处理以及用户界面的设计。通过这样的实践,开发者不仅能深入理解Android组件间通信机制,还能掌握如何打造用户体验良好的个性化...
隐式Intent不直接指定目标组件,而是通过设定Action、Data、Category等元数据来描述一个操作,然后系统会遍历所有注册过的Intent Filter,找到最适合处理这个Intent的组件。这种方式允许不同应用之间的组件互相调用...
在AndroidManifest.xml中,为组件定义Intent Filter,使得组件可以响应隐式Intent: ```xml <activity android:name=".MyActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> ...
Android中隐式Intent与Activity的匹配原则2022优秀文档 Android中隐式Intent与Activity的匹配原则是Android系统中的一种机制,用于在Activity之间进行通信和交互。隐式Intent是一种非显式的Intent,可以不指定具体...
显式Intent用于指定要启动的确切组件(Activity或Service),而隐式Intent则是向系统广播一个行动请求,任何符合Intent过滤器的组件都可以响应。 2. 创建Intent 创建Intent非常简单,你可以使用`new Intent()`构造...
而隐式Intent则是不指定具体组件,而是通过Action、Data、Category等元数据来匹配系统中能够处理该Intent的组件。 1. 显式Intent的使用: - 创建Intent实例:`Intent intent = new Intent(context, TargetActivity...
显式 Intent 直接指定了目标组件的名称,而隐式 Intent 则不指定,而是通过 Intent Filter 来匹配合适的组件。 2. Intent 对象 Intent 对象包含了以下关键信息: 2.1 组件名字:可选,用于指定目标组件的具体类名...
当发送一个隐式Intent时,系统会遍历所有注册的组件,根据Intent Filter进行匹配,选择最合适的组件来处理Intent。 总结,Intent1_Intent.zip中的源码可能涵盖了Intent的基本使用、数据传递、Intent Filter配置...
通过这个简单的示例,我们可以了解如何在Android应用中使用隐式Intent进行界面间的切换。实际开发中,隐式Intent还常用于启动其他组件如Service、BroadcastReceiver,或者执行系统提供的操作如打开网页、发送短信等...
- 为了响应隐式Intent,需要在AndroidManifest.xml中为组件定义IntentFilter,声明ACTION、CATEGORY、DATA等。 - 例如,一个能处理URL的Activity可能需要这样的IntentFilter: ```xml <activity android:name="....
而隐式Intent则不指定具体组件,而是通过Action、Data、Category等元数据来定义一个操作,允许任何能够处理该操作的组件响应。 2. **Intent的构造** - `Intent(String action)`:创建一个具有特定动作的Intent。 ...
Android 隐式Intent 的实例详解还可以帮助我们更好地理解隐式Intent 的机制和应用场景,从而更好地使用隐式Intent 来实现我们的需求。 Android 隐式Intent 的实例详解还可以帮助我们更好地理解 Android 的意图...