Android----Intent详解

本文详细介绍了Android中的Intent机制,包括其两大功能:封装应用程序启动组件的意图和作为组件间通信的媒介。此外,还深入探讨了Intent的各种属性,如Component、Action、Category等,并提供了如何使用Intent启动不同组件的具体实例。

1.Intent对于Android应用的作用

大体可以分为两个功能:

① 封装Android应用程序需要启动某个组件的“意图”

② 作为应用组件之间的通信的媒介,将需要交换的数据封装成Bundle对象,然后使用Intent来携带Bundle对象

2.Intent对象详解

2.1 使用Intent启动系统组件

启动Activity:startActivity(Intent intent)

startActivityForResult(Intent intent,int requestCode)

启动Service:ComponentName startService(Intent intent)

boolean bindService(Intent service,ServiceConnection conm,int flags)

启动BroadcastReceiver:sendBroadcast(Intent intent)

sendBroadcast(Intent intent,String recePermission)etc

2.2 Intent的属性及intent-filter配置

Intent代表了Android应用启动一个应用的意图,Android应用将会根据Intent来启动指定组件,

至于启动哪个组件,就需要根据不懂的属性值来判断。

2.2.1 Component属性

首先介绍一个组件的概念:包括Service(服务),Activity(活动),Content(内容),

Intent(意图),BroadcastRece(广播),Notification(通知)

Intent的Component(成分)属性接受一个叫做ComponentName的值,ComponentName的结构器有:

Component(String pkg)//创建pkg所在包下的cls类所对应的所有组件

Component(String pkg,String cls)//创建pkg所对应的包下的cls类所对应的组件

Component(String pkg,Class cls)//创建pkg所对应的包下的cls类所对应的组件

他们的都是根据包明和类名去确定一个组件 然后启动它

还可以通过Intent的setClass(Context package,Class cls),setClassName(Context packageContext,String className)

setClassName(Strong packageName,String className)来指定该Intent要启动的组件

这种明确的指定启动哪个组件的叫做显式Intent 还有一种根据规则去启动和服规则的组件的叫做隐式Intent

for example 

?
1
2
3
4
5
6
7
8
9
10
HelloWorld1.java
 
Intent intent = new Intent();
ComponentName component = new ComponentName(HelloWorld1. this ,HelloWorld2. class );
intent.setComponent(component);
startActivity(intent);
 
HelloWorld2.java
 
ComponentName component = getIntent().getComponent(); //可以通过Intent获取Component的值

 

2.2.2 Action、Category属性与intent-filter配置

Intent的Action、Category属性都是一个普通的字符串,其中Action代表该Intent所要完成的一个抽象动作,而Category则用于

为Action增加额外的附近类别信息。通常Action与Category属性会结合使用。

当一个Activity或者其他的组件的配置信息中的Action和Category的值是多少。通常包括0~N个子元素

0~N个子元素 和 0~1个子元素。这就是相当一个妹子要找嫩朋友的条件。

当Intent设置的Action和Category全部满足组件的Action和Category时,该组件就会被打开了,这就相当于一个男孩子完全满足了妹子找的

条件后就在一起了。

一般来说,Intent一般只会指定一个Action,但是可以指定多个Category

2.2.3 指定Action、Category调用系统Activity

Action和Category的对应表 点击打开链接

2.2.4 Data、Type属性与intent-filter配置

Data属性通常用于向Action属性提供操作数据,Data属性接受一个uri对象,uri通常通过如下形式的字符串来表示:

 

?
1
2
content: //com.android.contacts/contacts/1
tel: 123

uri字符串要满足如下格式:

 

scheme://host:port/path

content是scheme部分,com.android.contacts是host部分,port部分被省略,/contacts/1是path部分

Type属性用于指定该Data所指定uri对应的MIME类型,这种MIME类型可以是任何自定义的MIME类型,

只要符合abc/xyz格式的字符串即可。

Type和Data属性有时候会相互覆盖,例如:Intent先设置Data属性再设置Type属性,Tpye就会覆盖Data

属性,反之亦然。解决方法就是设置调用setDataAndType()方法

对应的,在AndroidMainifest.xml文件中通过元素来设置Type,Data属性值

元素支持如下属性:

mimeType:用于声明该组件所匹配的Intent的Type属性

scheme:用于声明该组件所匹配Intent的Data属性的scheme部分

data:用于声明该组件所匹配的Intent的Data属性的host部分

host:用于声明该组件所匹配的Intent的Data属性的host部分

port:用于声明该组件所匹配的Intent的Data属性的port部分

path:用于声明该组件所匹配的Intent的Data属性的path部分

pathPrefix:用于声明该组件所匹配的Intent的Data属性的path前缀

pathPattern:用于声明该组件所匹配的Intent的Data属性的path字符串模板

启动组件的时候Type必须完全符合,但是Intent的data值只设置了一部分,则只需要满足设置的那部分就能启动了。

2.2.5 Extra属性

Intent的Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bnudle对象,Bundle

对象就是一个Map对象,可以存入多对key-value值

2.2.6 Flag属性

Flag属性用于为该Intent添加一些额外的控制旗杆,可以调用addFlags()方法来为Intent添加控制旗杆

Flag属性的对应表 点击打开链接 

2.3 使用Intent创建Tab页面

在不同的Tab页面下的content为一个Activity

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TabHost tabHost = getTabHost();
TabHost.addTab(tabHost.newTabSpec( "tab1" )
                       .setIndicator( "已接电话" )
                       .setContent( new Intent( this ,HelloWorld1. class )
                                        )
                        );
 
TabHost.addTab(tabHost.newTabSpec( "tab2" )
                       .setIndicator( "未接电话" )
                       .setContent( new Intent( this ,HelloWorld2. class )
                                        )
                        );
 
TabHost.addTab(tabHost.newTabSpec( "tab3" )
                       .setIndicator( "呼出电话" )
                       .setContent( new Intent( this ,HelloWorld3. class )
                                        )
                        );

 

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

转载于:https://www.cnblogs.com/rabbit-bunny/p/4283291.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值