intent (意图)和 intent filter( 意图过滤器)

本文粘贴复制于两位博主:

Intent和IntentFilter的区别详解_lizhong-CSDN博客

简述 IntentFilter(意图过滤器) - DarJeely - 博客园 (cnblogs.com)

一、intent (意图)和 intent filter(意图过滤器)

1.intent

1.1显式intent:

显式 Intent,可以通过类名来找到相应的组件,在应用中用显式 Intent 去启动一个组件,通常是因为我们知道这个组件(Activity、Service)的名字。

Intent intent = new Intent(context,AActivity.class);

startActivity(intent);

1.2隐式intent:

隐式 Intent,不指定具体的组件,但是它会声明将要执行的操作,从而匹配到相应的组件。最简单的 Android 中调用系统拨号页面准备打电话的操作,就是隐式 Intent。

Intent intent = new Intent(Intent.ACTION_DIAL);

Uri data = Uri.parse("tel:" + "13888888888");

intent.setData(data);

startActivity(intent);

1.3 Intent 的相关属性

1.component(组件)

目的组件的名称,这个只有显式 Intent 有,隐式 Intent 没有。例如:com.madreain.DemoActivity。该属性可以通过 setComonentName()、setClass()、setClassName()或者 Intent 的构造函数来设置。

重要:2.action(动作)-------------------------------------------------------------------------------------

用来表现意图的行动,这个可以用户自定义也可以使用系统中自带的 Action 值。例如:com.madreain.intent.MY_ACTION"该属性可以通过 setAction()方法或者 Intent 的构造函数来设置。

系统中常用的 Action 值:ACTION_MAIN,标识 Activity 为一个程序的开始ACTION_VIEW,当有一些信息需要展示出来ACTION_SEND,发送邮件Action_CALL,呼叫指定的电话号码ACTION_DIAL,拨打电话ACTION_EDIT,编辑某些文件ALL_APPS,列出所有的应用ACTION_ANSWER,处理呼入的电话

重要:category(类别)--------------------------------------------------------------------------------------用来表现动作的类别,它是一个 ArraySet 类型的容器,所以可以向里面添加任意数量的补充信息,同时,Intent 没有设置这个属性不会影响解析组件信息。可以通过 addCategory()方法来设置该属性常用的 Category 的值:CATEGORY_LAUNCHER,应用启动的初始 Activity,这个 Activity 会被添加到系统启动 launcher 当中。CATEGORY_BROWSABLE,设置 Category 为该值后,在网页上点击图片或链接时,系统会考虑将此目标 Activity 列入可选列表,供用户选择以打开图片或链接。CATEGORY_APP_EMAIL,用来启动邮件应用程序

重要:data(数据)-------------------------------------------------------------------------------------------表示与动作要操纵的数据,它是待操作数据的引用 URI 或者数据 MIME 类型的 URI,它的值通常与 Intent 的 Action 有关联。实际应用打开指定网页 。

Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baidu.com"));

startActivity(intent); 

type(数据类型)--------------------------------------------------------------------------------------对于 data 范例的描写,当Intent不指定Data属性时,Type属性才会起作用,否则Android系统将会根据Data属性值来分析数据的类型,所以无需指定Type属性。data和type属性一般只需要一个,通过setData方法会把type属性设置为null,相反设置setType方法会把data设置为null,如果想要两个属性同时设置,要使用Intent.setDataAndType()方法常用type类型:intent.setType(“image/”);//选择照片intent.setType(“audio/”); //选择音频intent.setType(“video/”); //选择视频 (mp4 3gp 是android支持的视频格式)intent.setType(“video/;image/*”);//同时选择视频和图片 

2.intent filter


1.什么是IntentFilter ?

IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图。

当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件,服务。

例如:当用户点击PDF文件的时候,Android系统就会通过设定好的意图过滤器,进行匹配测试。找到能够打开PDF文件的APP程序。

2.IntentFilter 如何过滤隐式意图?

Android系统会根据我们配置的Intent Filter(意图过滤器),来进行匹配测试。

匹配的时候,只会考虑三个方面:动作、数据(URI以及数据类型)和类别。

也就是说Android系统会进行“动作测试”,“数据测试”,“类别测试”,来寻找可以响应隐式意图的组件或服务。

另外,当对其他App程序开放组件和服务的时候也需要配置Intent Filter(意图过滤器),一个Activity可以配置多个<intent-filter>。

学习总结:

感觉intent和intent-filter就是 一个是三个孔的插座,一个是三个头子插头。每个孔的功能都不一样,插头的每个头子也不一样。分别对应:Action、category和data。需要同时三个满足一定的要求,这样插座才能插好,才能工作。那么,这个一定的要求就是下面的:匹配规则。

3.匹配规则

上面介绍了相关属性,我们知道当我们发送一个隐式Intent后,系统会将它与设备中的每一个组件的过滤器进行匹配,匹配属性有Action、Category、Data三个,需要这三个属性都匹配成功才能唤起相应的组件。

接下来分别介绍Action、Category、Data的匹配规则

1.Action匹配规则

一个过滤器可以不声明Action属性也可以声明多个Action属性。隐式Intent中的Action属性,与组件中的某一个过滤器的Action能够匹配(如果一个过滤器声明了多个Action属性,只需要匹配其中一个就行),这样就算匹配成功。如果过滤器没有声明Action属性,那么只有没有设置Action属性的隐式Intent才能匹配成功。

2.Category匹配规则

一个过滤器可以不声明Category属性也可以声明多个Category属性。隐式Intent中声明的Category必须全部能够与某一个过滤器中的Category匹配才算匹配成功。比如说一个Category属性设为CATEGORY_BROWSABLE的隐式Intent也可以通过上面的过滤器,也就是说,过滤器的Category属性内容必须是大于或者等于隐式Intent的Category属性时候,隐式Intent才能匹配成功。如果一个隐式Intent没有设置Category属性,那么它可以通过任何一个过滤器的Category匹配。

3.Data匹配规则

一个过滤器可以不声明Data属性也可以声明多个Data属性。每个Data属性都可以指定数据的URI结构和数据MIME类型。URI包括scheme、host、port 和path四个部分,host和port合起来也成authority(host:port)部分。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容