Intent 详解

本文深入解析Android系统中意图组件的作用、传递信息的方式(显示意图和隐示意图),并通过实例展示了如何使用这些组件进行界面跳转、数据传递等操作。

        在英文单词这个英文的意思是“意图,目的”。对,这个组件就在我们进行通信的时候传入我们意图的。三大组件(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");


   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值