Intent(意图)主要是解决Android应用的各项组件之间的通讯。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity)
为了实现这个目的,listActivity需要构造一个 Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的 Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
对于intent主要的分类主要包括隐式意图和显式意图。显式意图通常主要是启动本应用中的Activity之间的数据,而隐式意图则常见于启动系统中的某些特定的动作,比如打电话,或者是跨应用的Activity启动。
通常来说:
显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。
显示意图非常常用也非常简单一般用于应用程序内之间Activity的相互调用转换,就不多说了,这里我介绍一下隐式意图:
简单概括就是: 意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),Tpye(类型)等等,举个例子,说白了意图就是启动一个组件的的完整的动作信息,就像打人,打就是Action动作,人就是Data内容,而Type就是类型,打什么人呢?打坏人,type就是坏指的类型,只有这些信息全了才能执行一个完整的意图,当然还有一些信息,比如scheme就是URI类型的数据的前缀,就像这个例子当中的sms:,还有host主机名,path路径等。
这里我给大家举一个调用系统短信的例子,使用隐式意图启动系统短信,并给10086发送信息的例子。代码如下:

 /**
* 隐式意图的方法启动系统短信
*
* 简单概括就是: 意图包括:Action(动作),Category(附加信息),Data(数据,具体内容),Tpye(类型)等等,举个例子,
* 说白了意图就是启动一个组件的的完整的动作信息
* ,就像打人,打就是Action动作,人就是Data内容,而Type就是类型,打什么人呢?打坏人,type就是坏指的类型
* ,只有这些信息全了才能执行一个完整的意图
* ,当然还有一些信息,比如scheme就是URI类型的数据的前缀,就像这个例子当中的sms:,还有host主机名,path路径等
*
* @param view
*/
public void startOne(View view) {
Intent intent = new Intent();
intent.setAction("android.intent.action.SENDTO");// 发送信息的动作
intent.addCategory("android.intent.category.DEFAULT");// 附加信息
intent.setData(Uri.parse("sms:10086"));// 具体的数据,发送给10086
startActivity(intent);
}
 

上边的这个例子是调用系统的东西,下边我们来看看自定义的隐式意图是怎么调用的。
首先是先在清单文件中进行注册,代码如下:

第二个Activity里的东西就是我们自定义设置的,就是下边的这段代码:

 <activity android:name="net.loonggg.intent.SecondActivity" >
<intent-filter> <!-- 自定义的动作 -->
<action android:name="net.loonggg.xxx" />
<!-- 自定义的scheme和host -->
<data
android:host="www.baidu.com"
android:path="/person"
android:scheme="loonggg" />
<!-- 自定义的类型 -->
<data android:mimeType="person/people" />
<!-- 附加信息 -->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
 

那在代码中怎么调用自定义的呢?其实跟调用系统短信一样,只不过调用系统短信里的那些动作和数据,系统已经给我们配置好了,我们直接用就行,而自定义的就是我们自己写的,调用方法和系统其实是一样的。方法如下:

  1.  /**
    * 通过自定义的隐式意图启动
    *
    * @param view
    */
    public void startTwo(View view) {
    Intent intent = new Intent();
    intent.setAction("net.loonggg.xxx");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.setDataAndType(Uri.parse("loonggg://www.baidu.com/person"),
    "person/people");
    startActivity(intent);
    }

特别注意的一点是:intent.setData(data)和intent.setType(type)注意这两个方法会互相清除,意思就是:如果先设置setData(data)后设置setType(type),那么后设置的setType(type)会把前面setData(data)设置的内容清除掉,而且会报错,反之一样,所以如果既要设置类型与数据,那么使用setDataAndType(data,type)这个方法。

 
参考出处:http://blog.csdn.net/loongggdroid/article/details/17887975

1.多页面的创建
1.1使用android内置助手:包邮件->New->Other->Android Activity
1.2创建类的方式创建:
创建类并继承extends Activity
创建模板
super.onCreate(savedInstanceState);
// 绑定与类对应的xml模板
setContentView(R.layout.activity_sms);
配置文件中添加属性:
<activity android:name="com.cui.meshelp.ListSmsActivity" >
</activity>

意图传递数据

//创建意图
Intent data=new Intent();
//将数据已键值对的形式存入意图
data.putExtra("smsInfo", smsInfo);
//设置返回数据方法(区别码,数据)
setResult(1,data);
//关闭activity并回传数据给onActivityResult().
finish(); //获得数据页面
//获取意图返回的数据
protected void onActivityResult(int requestCode,int resultCode,Intent data){
if(data!=null){
//获取String类型的数据
String Info = data.getStringExtra("smsInfo");
if(requestCode==0){
et_content.setText(Info);
}else if(requestCode==1){
et_phone.setText(Info);
}
}
super.onActivityResult(requestCode, resultCode, data);
}

基础学习总结(八)--Intent中显示意图和隐式意图的用法的更多相关文章

  1. Android学习记录(7)—Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的 ...

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

    意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么.        意图的作用:        1.激活组件   ...

  3. Android的显示意图和隐式意图总结

    显示意图 简而言之: 通过指定特定Activity的包名和类名开启Activity 应用场景: 一般应用于本App内的activity间的跳转. XML配置信息: AndroidManifest.xm ...

  4. Android中显式意图和隐式意图的区别

    1.显式意图 可以直接通过名称开启指定的目标组件: 通过构造方法Intent(Context packageContext,class<?>cls)来实现. button_1 = (But ...

  5. Activity组件:(一)通过显式意图和隐式意图来实现Activity间的跳转

    一.通过显式意图来实现Activity间的跳转 显式意图是指在创建Intent对象时就指定接受者组件 /** * 下面是通过显式意图进行跳转,即明确写出要跳转到SecondActivity.class ...

  6. Activity组件(二):通过显式意图和隐式意图来跳转至第三方应用

    一.显式意图来跳转到第三方应用 /** * 这个方法会在点击按钮的时候执行 * @param view */ public void skip2Browser(View view){ Log.d(TA ...

  7. android intent 隐式意图和显示意图(activity跳转)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  8. 隐式意图Intent

    在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...

  9. Android学习笔记_17_Intent匹配规则(隐式意图)

    Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行 ...

随机推荐

  1. SQL Server 中的事务和锁(三)-Range S-U,X-X 以及死锁

    在上一篇中忘记了一个细节.Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避 ...

  2. Conversions

    Problem Description Conversion between the metric and English measurement systems is relatively simp ...

  3. Eclipse中配置Tomcat碰到Server Tomcat v6.0 Server at localhost failed to start问题

    控制台打印异常如下: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logg ...

  4. UVa OJ 10300

    Problem A Ecological Premium Input: standard input Output: standard output Time Limit: 1 second Memo ...

  5. 每天一道面试题(2):实现strncpy

    目录 0. 为何要写strncpy? 1. 源码及测试结果 2. 面试注意事项 3. 小结

  6. 3. Android框架和工具之 xUtils(BitmapUtils)

    1. BitmapUtils 作用: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象: 支持加载网络图片和本地图片: 内存管理使用 ...

  7. Debian 中添加ppa

    在Debian8中默认没有"apt-add-repository"命令,所有也就没法安装ppa. 怎么破? sudo apt-get install software-proper ...

  8. VMware系统运维(十一)部署虚拟化桌面 Horizon View 5.2 HTML ACCESS安装

    如果你希望在浏览器上面能够连接到用户桌面,那么HTML ACCESS是必须安装的,下面开始安装. 1.点击红框文件 2.打开安装向导,点击"下一步" 3.接受协议,点击" ...

  9. python 基础——变量

    变量赋值 1. 把任意类型的变量[名称]赋值给新的变量,总是增加对象引用,而不是创建新的对象 2. 对于list.dict可变类型,操作的都是同一个对象 3. 使用del删除的是该对象的一个引用,只有 ...

  10. 社区APP “钱途”漫漫

    花样年曾宣称:2013年“彩生活”物业品牌收入1.85亿,毛利率超过40%:万科万客会APP.龙湖物业APP……大量房地产企业依托物业企业,纷纷瞄准移动互联网.云计算.物联网等高新科技为基础的物业服务 ...