Intent提供了一种一致的编程模型,Intent还是应用程序组件之间通信的重要媒介,两个Activity可以把需要交换的数据封装成Bundle对象,然后用Intent来携带Bundle对象,这样就实现了两个Activity之间的数据交换。
Android的应用程序包含三种重要组件:Activity、Service、BroadcastReceiver,应用程序都是采用Intent来启动他们的。
Intent的属性及intent-filter配置:
1、Component属性:
Intent的Component属性需要接受一个ComponentName对象,包含如下几个构造器,通过显示Intent启动一个Activity:
当程序通过Intent的Component属性启动特定组件时,被启动组件几乎不需要用<intent-filter....>元素进行配置
2、Action与Category属性与intent-filter配置
Action与Category属性都是一个普通的字符串,其中Action表示Intent所要完成的一个抽象”动作“,而Category则用于为Action添加额外的附加类别信息。通常Action和Category结合使用。
Action完成的只是一个抽象”动作“,这个动作具体由哪个组件来完成,Action这个字符串本身并不管。这取决于Activity的配置,只要有某个Activity配置文件符合,该Activity就可能被启动。如果有多个Activity都符合,则会弹出对话框供用户选择。
Action和Category在Intent中的配置:
注意:一个Intent对象只能有一个Action属性,但一个Intent可以有多个Category属性。且Cateory的默认值为intent.category.DEFAULT常量。Cateory的值可以不指定,就为默认值。
在Activity的Manifest.xml文件中的配置:
3、Data、Type属性与intent-filter配置
Data属性通常用于向Action属性提供操作的数据。Data接受一个Uri对象,Uri对象的格式如下:
Type属性用于指定该Data所指定Uri对应的MIME类型,这种MIME类型只要满足abd/xyz格式的字符串即可。
Data与Type的关系:
1)、如果Intent先设定Data的值,后设置Type的值,那么Type就会覆盖Data属性。
2)、如果Intent先设定Type的值,后设置Data的值,那么Data就会覆盖Type属性。
如果希望同时设定Data和Type的值,就应该调用Intent的setDataAndType()方法。
在Intent中设置Data和Type属性:
在配置文件中设置(都通过<data .../>设置):
4、 Extra属性
Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,它可以存入多个键值对,这样就可以在多个Activity之间进行数据交换了。
5、Flag属性
Intent的Flag属性用于为该Intent添加一些额外的控制旗标,可调用addFlags()方法来为Intent添加控件旗标。