android-Intent and IntentFilter

一、Intent简介

  Android使用Intent来封装程序的调用“意图”,Activity、Service、BroadcastReceiver三种重要的组件都是依靠Intent来启动的,很明显使用Intent提供了一致的编程模型;使用Intent还有一个好处是,在某些时候应用程序只是想启动具有某些特征组件,并不想和某个具体的组件耦合,如果使用形如startActivity(Class activityClass)的方法来启动特定的组件,势必造成一种硬编码耦合,这样也不利于高层次的解耦。

二、Intent启动不同组建的方法

  Activity         :   startActivity(Intent intent)

               startActivityForResult(Intent intent,int requestCode)

   Service        :   ComponentName startService(Intent Service)

               boolean bindService(Intent Service,ServiceConnection,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)

              sendStickyBroadcast(Intent intent,String receiverPermission,BroadcastReceiver resultReceiver,Handler scheduler,

                          int initialCode,String initialData,Bundle initialExtras)

三、Intent对象的属性

    Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动制定组件,至于具体启动哪个组件取决于Intent的各个属性。

    Intent属性大致包括:Component、Action、Category、Data、Type、Extra 、Flag;

    1、Component属性用于明确(显示启动)指定需要启动的目标组件;

    2、Action代表该Intent所要完成的一个抽象动作,这个动作具体由哪个组件来完成则取决于Activity的<intent-filter.../>配置,其属性的值是一个普通的字符串;需要注意的是一个Intent对象最多只能包括一个Action属性,设置Action属性的方法:setAction(MainActivity.KK_ACTION);。

    3、Category用于为Action增加额外的附加类别信息,通常会与Action属性结合使用,其属性值也是一个普通的字符串;一个Intent对象可以包括多个Category属性,程序可调用Intent的addCategory(String str)方法为Intent添加该属性。通过Intent调用Activity时,Android默认会自动添加CATEGORY_DEFAULT类别属性,故在Filter配置中CATEGORY_DEFAULT是不可缺少的;

    4、

    5、

    6、Extra属性用于“携带”需要交换的数据

    7、

  <intent-filter.../>元素里通常包含如下子元素:

    0~N个<action.../>子元素;

    0~N个<category.../>子元素;

    0~1个<data.../>子元素。

四、Action、Category与intent-filter配置

  1、创建一个Android工程时配置文件AndroidManifest.xml中的intent-filter标签中会自动生成两个子元素:

    <action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />;那么这两个子元素代表什么?

  我们都知道一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需要显示在程序列表里,有些不需要,该如何定义?首先,android.intent.action.MAIN决定应用程序最先启动的Activity, 其次由android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里,也就是说这两者是配合使用的。

  2、为什么加入android.intent.category.DEFAULT?

  每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。 只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。

  3、getAction()与getCategories()

      String action=getIntent().getAction();   获取该Activity对应的Intent的Action属性
         Set<String> cates=getIntent().getCategories();  获取该Activity对应的Intent的Category属性

五、指定Action、Category调用系统Activity

  Intent代表了启动某个程序组件的意图,实际上Intent对象不仅可以启动本应用内程序组件,也可以启动Android系统的其他应用程序的组件,包括系统自带的程序组件(只要权限允许)。Android内部提供了大量标准的Action、Category常量,其中用于启动Activity的标准Action常量及对应的字符串如下:

  上述Action、Category常量在java文件中直接用即可,不需要在AndroidManifest.xml中配置。

六、data、Type属性与intent-filter配置

时间: 2024-10-11 02:54:32

android-Intent and IntentFilter的相关文章

android:android Intent and IntentFilter

文章来自:http://blog.csdn.net/intbird 如果说是将一个activity有其他应用打开,或者是在webView中调用我们自己的activity,那么最好就是使用intentfilter来过滤我们需要的activity; 说明什么是uri参数 Java Code: final Uri uri = Uri.parse("intbird://com.intbird.soft/testing/tested?name='Test'"); TextView textVie

android笔记--Intent和IntentFilter详解

Intent用于启动Activity, Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介. 使用Intent启动组件的优势1, Intent为组件的启动提供了一致的编程模型. 无论想要启动的组件是Activity, Service, 还是BroadcastReceiver, 都可以使用Intent封装启动的意图.2, 在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的

Android的Intent和IntentFilter应用说明一例

转自:http://www.blogjava.net/TiGERTiAN/archive/2010/02/03/311827.html 很多人对文档中的Intent和IntentFilter不理解是什么意思,我这里举例解释下.Intent字面意思就是目标,目的.通俗一点,需要达成某些目标,则需要提供一些动作,这些目标的分类,以及达成这些目标所需要的一些数据等等.Android中的Intent通过Action,Category和data等属性进行了相应的描述,我们想做某些事情(达成某些目标),就需

Android应用程序组件之间的通信Intent和IntentFilter

Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 1.1 Intent类简介 Intent类的对象是组件间通信的载体,组件之间进行通信就是一个个Intent对象在不断地传递.Intent对象主要作用于运行在相同或不同应用程序的Activity,Service和Broadcast Receiver组件之间,对于这3种组件,其作用机制也不相同 一,对于

Android两个注意事项.深入了解Intent和IntentFilter(两)

深入理解Intent和IntentFiler(二) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一篇文章中,我们比較具体学习了"Intent"的相关知识,如今将学习怎样设置Intent对象的这些属性以及怎样使用他们来启动组件. Intent对象是一组信息,我们能够通过设置其Action.Data.Category属性来指定启动哪个组件并完毕什么样的动作(包括动作所需的数据). "意图"分为显示intent

Android笔记六.深入理解Intent和IntentFilter(二)

深入理解Intent和IntentFiler(二) Jiangdg_VIP http://blog.csdn.net/u012637501 在上一篇文章中,我们比较详细学习了"Intent"的相关知识,现在将学习如何设置Intent对象的这些属性以及如何使用他们来启动组件.Intent对象是一组信息,我们可以通过设置其Action.Data.Category属性来指定启动哪个组件并完成什么样的动作(包含动作所需的数据). "意图"分为显示intent和隐式inten

android之android.intent.category.DEFAULT的用途和使用

转载(http://blog.csdn.net/jason0539/article/details/10049899) 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent= new Intent(this, B.class): Implicit Intent没有明确的指定要启动哪个Activity

Android Intent 意图作用

Intent分为两大类: (1)显性的(Explicit) (2)隐性的(Implicit) 对于隐性意图,在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的目的.(在模块间的组件启动) intent定位事件的目的地: (1)种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序. (2)类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目

Intent和IntentFilter的理解

<activity android:name=".SecondActivity"> <intent-filter> <action android:name="hello1" /> <action android:name="hello2" /> <category android:name="android.intent.category.DEFAULT" /> &

android细节之android.intent.category.DEFAULT的使用

我们知道,实现android的Activity之间相互跳转需要用到Intent, Intent又分为显式Intent和隐式Intent, 显式Intent很简单,比如我在FirstActivity中想跳转到SecondActivity,只需要直接声明就行了: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 而在使用隐式Intent实现Activity之间跳转的时候,并没有明确指定要打开哪个activity