首页 > 编程知识 正文

一个intent组件包含哪些属性(intent filter)

时间:2023-05-04 01:36:41 阅读:76011 作者:3249

上一章介绍了Activity、Service和BroadCastReceiver,这三个启动和数据传递都用于Intent,这表明Intent在Andorid中的重要性Intent这个英语单词的本意是“目的、意向、意图”。 Intent是一种运行时绑定机制,在程序运行时连接两个不同的组件。 通过Intent,你的程序可以向安卓传达某种请求和意愿。 Android根据意愿选择适当的组件进行响应。

目录-查看

-隐藏

-属性

-匹配规则

-PendingIntent

Intent有两种类型:显示和隐藏。 对各个进行说明

显示显式Intent,您可以在类名中找到相应的组件。 在APP应用程序中使用显式Intent启动组件通常是因为您知道该组件(Activity,Service )的名称。 您知道具体活动的名称,如下代码所示。 要启动新的活动,请显示Intent,如下所示:

intentintent=newintent(context,AActivity.class; 开始活动(intent; 复制代码时,隐藏隐式Intent,不指定任何特定组件,但声明要执行的操作并匹配相应的组件。 用最简单的Android调用系统拨号页面准备打电话的操作是隐式Intent。

intent intent=new intent (intent.action _ dial; uri data=uri.parse (tel : (13888888 ); intent.setdata (数据; 开始活动(intent; 复制代码以使用隐式Intent时,系统会通过将Intent对象中的IntentFilter与AndroidManifest.xml或代码中动态声明的组件的IntentFilter进行比较如果组件的Intent过滤器与Intent中的Intent过滤器完全匹配,系统将启动该组件并将Intent传递给它。 如果多个组件同时匹配,系统将显示一个选择框,允许用户选择使用哪个APP应用程序处理此互联网。 例如,单击web链接可能会显示多个APP应用程序,使用户能够选择使用哪个浏览器打开该链接。 隐式Intent启动固定活动。

在AndroidManifest.xml注册

activity Android 3360 name='.second activity ' intent-filteractionandroid : name=' com.madre ain.intent.my _ activivivion ate gory.default '/intent-filter/activity复制代码隐式intent启动activity代码

Intent intent=new Intent (; 设置//操作(实际action属性只是字符串标记) ' com.madreain.intent.my_action ' ); 启动活动(intent; 复制代码上方的隐式Intent启动活动时,您会注意到action属性。 接下来,我们将详细介绍与Intent相关的属性

属性component(组件)目标组件的名称。 这只存在于显式Intent中,不存在于隐式Intent中。 例如com.madreain.DemoActivity。 可以在setComonentName ()、setClass ()、setClassName ()或Intent构造函数中设置此属性。

action(动作)为表达意图而采取的行动。 这可以由用户自定义,也可以使用系统中提供的操作值。 例如,com.madreain.Intent.MY_ACTION '可以在setAction ()方法或intent构造函数中设置此属性。

系统中常用的Action值: ACTION_MAIN,如果Activity标识为程序的起始ACTION_VIEW,并且需要指示ACTION_SEND的信息,请将邮件Action_CALL

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/*”);//同时选择视频和图片

extras(扩展信息) 扩展信息,以key-value键值对的形式来存储组件执行操作过程中需要的额外信息,可以调用putExtra()方法来设置该属性,这个方法接受两个参数,一个是key,一个是value。也可以通过实例化一个储存额外信息的Bundle对象,然后调用putExtras()方法将我们实例化的Bundle添加到Intent中。

Flags(标志位) 期望这个意图的运行模式,这个属性可以指示系统如何启动一个Activity,以及启动之后如何处理

补充: Intent.createChooser():可用于启动网页强制每一次唤起选择框 接受隐式Intent:我们也可以设置我们可以接受的文件的type,然后隐式Intent能够匹配到任意一个过滤器就能被启动了

匹配规则

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

Action匹配规则

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

Category匹配规则

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

Data匹配规则

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

PendingIntent

说到了Intent,我们就再来说说PendingIntent,PendingIntent是对Intent的一种封装。用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。

实例应用:Notification,SmsManager,AlarmManager等

转载于:https://juejin.im/post/5cf235976fb9a07ed22455de

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。