Android技术——Intent Filter

1、要把一个Activity或者Service注册为一个可以接受隐式intent的处理程序,需要在它的manifest节点中添加一个intent-filter标签。

2、intent-filter标签包含的属性:

intent-filter包含action,category,data三大属性。在隐式intent发布时,这些属性将与这个intent进行匹配,匹配的结果将决定那个(些)处理程序将会被调用。

2.1 action

每个Intent Filter必须要包含至少一个action标签。Action的android:name属性指定需要处理的动作名称。这个名称应该是唯一的描述性字符串,推荐的做法是借鉴java包名约定来命名Action。

2.2 category(类别)

category使用android:name属性来指定在什么情况下为intent提供服务。每个Intent Filter可以有多个category标签。既可以指定自己的category也可以使用Android提供的标准值。

这些标准值有:

LAUNCHER:监听这个Intent Filter的Activity会出现在应用程序的启动器中。

HOME:监听这个Intent Filter的处理程序可以作为本地屏幕的可选项。

BROWSABLE:监听这个Intent Filter的处理程序将可以处理一个来自浏览器内部的动作。

ALTERNATIVE:为特定动作提供默认的操作。

SELECTED_ALTERNATIVE:

2.3 data

隐式intent用于匹配intent-filter的数据类型,这些数据类型有:

android:host、android:mimetype、android:path、android:port、android:scheme

例如我们在点击一段下载链接时,到底是触发浏览器还是触发迅雷下载软件,这个就是由data标签来实现的。

3、intent-filter的匹配过程

在使用隐式intent来启动可能的处理程序时,这个intent将会和所有已经在Android操作系统注册过的intent-filter有一个匹配过程。这个匹配过程将会找出符合要求的最合适的处理程序来处理这个隐式intent。

step1:隐式intent的action name必须与intent-filter的action name相同,否则匹配失败

step2:隐式intent的category只能是intent-filter的子集,否则匹配失败

step3:data里面的数据必须逐项完全相同,否则匹配失败

step4:如果有多个处理程序的intent-filter同时匹配这个隐式intent,

时间: 2024-10-15 00:39:13

Android技术——Intent Filter的相关文章

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

如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>,该文对本文要使用的action.category以及data都进行了详细介绍. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 概述 我们知道,Intent是分两种的:显式Intent和隐式Intent.如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否

Android Google官方文档(cn)解析之——Intents and Intent filter

应用程序核心组件中的三个Activity,service,还有broadcast receiver都是通过一个叫做intent的消息激活的.Intent消息传送是在相同或不同的应用程序中的组件之间后运行时绑定的一个设施.Intent对象也就是它自己是一个数据结构,这个数据结构持有将要执行操作的抽象描述,或者在broadcast的情况下,是一个已经发生而将要宣布的描述.为传递intent到每个不同类型的组件有单独的机制: 一个Intent对象被传递到Context.startActivity()或

Android中的Intent Filter匹配规则介绍

本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity.Service.Broadcast Receiver)中打开另一个组件. Intent可分为隐式(implicitly)和显式(explicitly)两种: Explicitly Intent:在知道要打开哪个具体的Component时使用,通过指定调用者和被调用者即可打开目标Component:

android intent filter浏览器应用的设置,如何使用choose-box选择应用

//使用chooserIntent private void startImplicitActivation() { Log.i(TAG, "Entered startImplicitActivation()"); // TODO - Create a base intent for viewing a URL // (HINT: second parameter uses Uri.parse()) Uri myUri = Uri.parse(URL); Intent baseInte

Android开发教程:理解Intent和Intent Filter

在Android 帮助文档中,Intent的介绍为An intent is an abstract description of an operation to be performed,意思是一个Intent是对一个即将进行的操作的抽象,Intent的字面意识就是“意图”,Android应用程序中的三种其他应用程序基本组件——Activity, Service和Broadcast Receiver,都是使用称为intent的消息来”激活”的.对于向这三种组件发送intent有不同的机制: 使用

Android开发- Intent和Broadcast Receiver

Intent是一种消息传递机制,可以在应用程序内使用,也可以在应用程序间使用.可以用于: 使用类名显示启动一个特定的Service或者Activity. 启动Activity或者Service来执行一个动作的Intent,通常需要使用特定的数据,或者对特定的数据执行动作. 广播某个时间已经发生. 使用Intent来启动Activity 显式启动新的Activity Intent intent = new Intent(MyActivity.this, SelectHorseActivity.cl

Android技术面试整理

前19题为常考题目!!  1.Android的四大组件是哪些,它们的作用? 2.请介绍下Android中常用的五种布局. 3.android中的动画有哪几类,它们的特点和区别是什么 4.android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别. 5.ListView的优化方案 6.请介绍下Android的数据存储方式. 7.activity的启动模式有哪些?是什么含义? 8.跟activity和Task 有关的 Intent启动方式有哪些?其含义? 9.请描述下Activit

Android技术总结2

Android技术总结2Java部分 Java虚拟机jvm分区,GC(基本上后续所有地方面试都问了,基础中的基础)虚拟机栈 线程私有 描述Java方法执行的内存模型 每个方法在执行的同时都会创建一个栈帧 用于存储局部变量表.操作数栈.动态链接.方法出口等信息每一个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机栈中入栈道出栈的过程.局部变量表存放了编译期可知的各种基本数据类型 对象引用 returnAddress类型本地方法栈 为虚拟机使用到的Native方法服务堆 线程共享 存放对象实例

Android中Intent的深入理解

(1)Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,使用Intent可以激活Android应用的三种类型的核心组件:活动Activity.服务Service.广播接受者Broadcast. (2)Intent又分为隐士意图和显示意图. 显示意图:调用intent.setComponent().intent.setClassName()或者intent.setClass()方法明确的制定组件名的Intent为显示意图,显示意图明确的制定要激活哪一