Android Intent 意图作用

Intent分为两大类:

(1)显性的(Explicit)

(2)隐性的(Implicit)

对于隐性意图,在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合. 使用Intent可以方便的达到这种高层次解耦的目的.(在模块间的组件启动

intent定位事件的目的地:

(1)种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。

(2)类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。

(3)组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后两个类实例。

(4)附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。

对于显性Intent:

//ComponentName comp = new ComponentName(FirstActivity.this, SecondActivity.class);

1 // 明确的指定了待启动的组件类, 此时的Intent属于显式intent
2 Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

对于隐性Intent,分几步:

(1) 在清单文件中的application节点下的activity下添加intent-fileter,添加action:

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.sample.student.query.number" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="studentNumber" />
    </intent-filter>
</activity>     
<activity  android:name=".OtherActivity">
   <intent-filter >
       <action android:name="com.sample.student.other"/>
       <category android:name="android.intent.category.DEFAULT"/>
       <data android:scheme="student" android:host="www.student.com" android:port="8080"/>
       <data android:scheme="other"/>
       <data android:mimeType="text/*" />
   </intent-filter>
</activity> 

(2)

1 // action
2 private final String studentQueryIntent = "com.sample.student.query.number";
3 // data
4 Uri studentNumberUri = Uri.parse("student:12");
5 Intent intent = new Intent();
6 intent.setAction(studentQueryIntent);
7 intent.setData(studentNumberUri);
8 startActivity(intent);
Intent intent = new Intent();
intent.setAction("com.sample.student.other");
Uri data = Uri.parse("student://www.student.com:8080");
//intent.setData(data);
intent.setDataAndType(data, "text/*");
startActivity(intent);

其中setData方法:

1 //注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用。
2 //要么单独以 setData 方法设置 URI
3 intent.setData(uri);
4 //如何在<data>中多了一个android:mimeType="text/*", 此时不能使用intent.setData, 而要使用intent.setDataAndType();
5 intent.setDataAndType(uri, "text/plain");
6 //要么单独以 setDataAndType 方法设置 Type
7 intent.setType("text/plain");

设置了多个data,只要匹配一个就可以启动这个activity。

如果设置了 <data android:scheme="student" android:host="www.student.com" android:path="/studentNum" android:port="8080"/>,必须完全匹配 Uri data = Uri.parse("student://www.student.com:8080/studentNum");才能启动。

如果 <data android:scheme="student" android:host="www.student.com"/>,那么 Uri data = Uri.parse("student://www.student.com:80"),Uri data = Uri.parse("student://www.student.com:8800"), Uri data = Uri.parse("student://www.student.com") 都可以匹配。

如果只设置了 <data android:scheme="student"/>,那么 Uri data = Uri.parse("test://") 就可以匹配,后面也可以加其他参数。

如果设置了mimeType,那么必须使用 intent.setDataAndType(data, "text/*"); 启动activity。

对于<intent-filter>中的action项可以有多个只要匹配其中一个就可以了。

隐性Intent:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

时间: 2024-10-26 17:37:16

Android Intent 意图作用的相关文章

Android中的Intent(意图)的使用

概述: Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦. 分类: 隐式意图 不用指定要打开的activity, 通过动作和数据的组合去查找系统中, 能处理指定动作和数据的界面,因此

Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中, 对Android UI做了初步的了解和学习,本篇继续进行Android开发学习的整理.Android应用通常由一个或多个基本组件组成,最常用的就是 Activity,本篇我们就来整理一下Activity活动的相关知识,以及Activity之间相互通信的Intent意图. 首先,我们来简单的介绍一下Activity 活动,如图所示(来自百度百科):

Android开发:显式/隐式Intent意图跳转Activity总结

显式跳转 在已知包名和类名的情况下常用的跳转方法: 是 nt mIntent = new Intent(); mIn Int etent.setClassName("com.android.settings","com.android.settings.Settings"); mContext.startActivity(mIntent); 我们也常这么用: y.class); startActivity(intent); 这是跳转到当前应用的某个Activity,

Android 之 Intent(意图)

Intent是 Android中重要的桥梁之一,它分为显式意图和隐式意图.接下来分别针对这两种意图进行讲解. 显式意图:通过指定一组数据或动作,激活应用内部的 activity:(相比隐式意图,此做法更安全) Intent intent = new Intent(); intent.setClass(MainActivity.this,Main2Activity.class); //第一个参数指的就是要跳转的那个Activity:第二个指的是跳到的那个Activity startActivity

Intent 意图

1.Intent作用 Intent是一个将要执行的动作的抽象的描述,解决Android应用的各项组件之间的通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用.intent主要用来启动activity或者service(并携带需要传递的参数信息). 2.Intent形式 意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),

[Android] Intent详解

[转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互.Intent这

Intent(意图)的使用

Intent(意图)-------------------------------Intent的作用主要是激活系统组件,以及在系统组件之间传递数据.Intent的核心属性:1) ComponentName:组件名称 ComponentName用于激活系统组件时,指定被激活的组件名称2) Extra:附加数据 Extra用于向Intent对象内部封装数据,当该Intent被用于激活组件时,被激活的组件就可以拿到该Intent,从而获取之前封装的数据. 可以在Intent中直接封装的数据类型相对比较

Android 显示意图和隐式意图的区别

意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么. 意图的作用: 1.激活组件 2.携带数据 3.意图的匹配(运用到隐式意图) android基本的设计理念是鼓励减少组件间的耦合,因此android提供了Intent(意图),用意图激活其他组件.Intent提供了一种通用的消息系统,它允许在你的应用程序与其他应用程序间传递Intent来执行和产生事件.使用Intent可以激活android应用的三个核心组件:

Android Intent基本使用

Android Intent基本使用 Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互.Intent这个英语单词的本意是"目的.意向.意图". Intent是一种运行时