在英文单词这个英文的意思是“意图,目的”。对,这个组件就在我们进行通信的时候传入我们意图的。三大组件(Activity,Service,BroadCast )都需要这个进行传递信息。意图在传递的过程中有两种方式:显示意图和隐示意图。
显示意图
顾名思义,就显示第传递信息。我们把的从哪个地方到哪个地方在声明并定义变量的时候,就做了详细的说明。
//定义一个Intent
Intent intent = new Intent(A.this, B.class);
//启动Activity
startActivity(intent);
以上的例子表示我们现在在A的组件上,我们要跳转到B的组件上。为什么要这样定义呢?前面的有节里面我提到过Android系统的应用的栈:当我们跳转到另外一个应用界面的时候,需要将前一个界面A放到到栈中,B在栈顶的位置运行。我们回退的时候,系统才知道我们需要退到那个界面。所以,需要这样定义。
隐示意图
隐示意图需要比配一些值:Action,Category, Data/Type,Component。
1.Action 如果你在定义Intent的时候有填写这个值,那么就会匹配AndroidMainfest.xml文件中有intentFilter和定义的值一样的Activity 或者Service 。如果有则匹配成功。如果有多个匹配成功则弹出界面供你选择。
2,Category 有时候我们除了填写Action 还填写了Category 。在Intent中填写了,我需要两个匹配OK才表示匹配成功。
3.Data/Type 我们在传递Intent的时可能也需要传递一些数据,我们使用 putExtras()(这个是用Bundle对象绑定很多的数据)或者putExtra("val", val)(这个是单个键值对)方法来绑定数据,我们在接收界面中用this.getIntent().getExtras()放来获取数据(String[] arrName = bundle.getStringArray("NAMEARR");)。Type是定义数据的类型。
另外我们来看看Intent的常见的构造函数:
Intent() 空构造函数
Intent(Intent o) 拷贝构造函数
Intent(String action) 指定action类型的构造函数
Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider
Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的
Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体
附件部分(常用的Intent,网上找的):
1,web浏览器
Uri uri= Uri.parse("http://kuikui.javaeye.com");
returnIt = new Intent(Intent.ACTION_VIEW, uri);
2,地图
Uri mapUri = Uri.parse("geo:38.899533,-77.036476");
returnIt = new Intent(Intent.ACTION_VIEW, mapUri);
3,调拨打电话界面
Uri telUri = Uri.parse("tel:100861");
returnIt = new Intent(Intent.ACTION_DIAL, telUri);
4,直接拨打电话
Uri callUri = Uri.parse("tel:100861");
returnIt = new Intent(Intent.ACTION_CALL, callUri);
5,卸载
Uri uninstallUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);
6,安装
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
7,播放
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt = new Intent(Intent.ACTION_VIEW, playUri);
8,掉用发邮件
Uri emailUri = Uri.parse("mailto:shenrenkui@gmail.com");
returnIt = new Intent(Intent.ACTION_SENDTO, emailUri);
9,发邮件
returnIt = new Intent(Intent.ACTION_SEND);
String[] tos = { "shenrenkui@gmail.com" };
String[] ccs = { "shenrenkui@gmail.com" };
returnIt.putExtra(Intent.EXTRA_EMAIL, tos);
returnIt.putExtra(Intent.EXTRA_CC, ccs);
returnIt.putExtra(Intent.EXTRA_TEXT, "body");
returnIt.putExtra(Intent.EXTRA_SUBJECT, "subject");
returnIt.setType("message/rfc882");
Intent.createChooser(returnIt, "Choose Email Client");
10,发短信
Uri smsUri = Uri.parse("tel:100861");
returnIt = new Intent(Intent.ACTION_VIEW, smsUri);
returnIt.putExtra("sms_body", "shenrenkui");
returnIt.setType("vnd.android-dir/mms-sms");
11,直接发邮件
Uri smsToUri = Uri.parse("smsto://100861");
returnIt = new Intent(Intent.ACTION_SENDTO, smsToUri);
returnIt.putExtra("sms_body", "shenrenkui");
12,发彩信
Uri mmsUri = Uri.parse("content://media/external/images/media/23");
returnIt = new Intent(Intent.ACTION_SEND);
returnIt.putExtra("sms_body", "shenrenkui");
returnIt.putExtra(Intent.EXTRA_STREAM, mmsUri);
returnIt.setType("image/png");
本文深入解析Android系统中意图组件的作用、传递信息的方式(显示意图和隐示意图),并通过实例展示了如何使用这些组件进行界面跳转、数据传递等操作。

442

被折叠的 条评论
为什么被折叠?



