Adnroid学习笔记:Intent与<intent-filter>的使用

Android中的Intent使用

Intent在Android中主要用于启动其他组件,它的本意可以理解为“意图”。既可以用它来启动Activity、Service、BroadcastReceiver,同时还能在其中携带各种数据,实现各组件的交流。

使用Intnet启动系统组件的方法

组件类型

启动方法

Activity


startActivity(Intent intent)

startActivityForResult(Intent intent)


Service


ComponentName startService(Intnet intent)

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


BroadcastReceiver

sendBroadcast(Intent intent)

sendBroadcast(Intent intent, String receiverPermission)

sendOrderedBroadcast (Intent intent, String receiverPermission)

sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

sendStickyBroadcast (Intent intent)

sendStickyOrderedBroadcast (Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)

 

Intent属性

主要有component、action、category、type、data、extra、flags

1.     Component 启动组件的名字

 

构造器:

ComponentName(String pkg, String cls)

创建pkg所在包下的cls类所对应的组件;

ComponentName(Context pkg, String cls)

创建pkg所对应的包下的cls类所对应的组件;

ComponentName(Context pkg, Class<?> cls)

创建pkg所对应的包下的cls类所对应的组件;

ComponentName(Parcel in)

 

ComponentName的创建需要指定包名和类名,以确定唯一的类,Intent调用setComponent(ComponentNamename)使应用程序可以启动指定的组件。一般使用Intent intent = new Intent(Context packageContext, Class<?>cls)来指定启动组件更为方便。

 

Intent中还可以使用以下方法添加组件名:

setClass(Context packageContext,Class<?> cls)

setClassName(Context packageContext, StringclassName)

setClassName(String packageName, StringclassName)

 

显示意图:指定了组件包名和类名的Intent

隐式意图:有时需要执行一个任务(比如打开一个网页),并不需要详细的指定一个组件,可以通过对意图添加一些属性来隐式调用,系统会根据各个组件的Intent-filter属性来选择启动那些组件。(注意:如果没有满足条件的组件可以启动,程序是会崩溃的,所以要先检查是否有可以启动的组件)。

 

Intent可以通过添加Action、Category、Data、Type属性声明一个隐式意图来执行一个抽象的动作,系统会根据组件配置的<intent-filter>对应属性来选择启动哪些组件。

 

2.     <intent-filter> Intent可以通过添加Action、Category、Data、Type属性声明一个隐式意图来执行一个抽象的动作,系统会根据组件配置的<intent-filter>对应属性来选择启动哪些组件。

 

Intent-filter可包含:

0~N个<actionandroid:name="" />

0~N个<categoryandroid:name=" " />

0~1个<data

可选属性:

miniType:  声明所能匹配的Intent的Type属性

scheme 声明匹配的Itent的Data属性的scheme部分

host:  声明匹配的Itent的Data属性的host部分

port:  声明匹配的Itent的Data属性的port部分

path:  声明匹配的Itent的Data属性的path部分

pathPrefix:  声明匹配的Itent的Data属性的path前缀

pathPattern:  声明匹配的Itent的Data属性的path字符串模板

/>

 

3.     Action  声明Intent所要完成的抽象动作

Intent.setAction(String action);

<intent-filtet><actionandroid:name="" />匹配

 

4.     Category用于为Action增加额外的附加类别信息

Intent. addCategory (String category);

<intent-filtet>的<categoryandroid:name=" " />匹配

 

1Intent只能包含一个Action,但可以包含多个CategoryAction通常与Category结合使用。

 

5.     Data 通常用于向Action属性提供操作的数据,该属性接受一个Uri对象

Intent.setData (Uri data);

<intent-filtet><data>匹配

Uri为一种特定形式的字符串,满足如下格式

 

6.     Type 用于指定该Data所指定Uri对应的MIME类型,可以为任意的MIME类型,只要符合adc/xyz格式的字符串即可。

 

Data属性与Type属性相互覆盖,具体情况如下:


Intent启动其他组件时会根据Intent的属性列出所有满足条件的intent-filter

 

7.     Extra 为一个键值对的Bundle对象,用于不同Activity之间进行数据交换。

8.     Flag 为该 Intent添加一些额外的控制旗标

Intnt.addFlags();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值