Intent详解(一)

    Intent,中文名为意图,简单说也就是传递消息。Intent是各个组件之间信息沟通的桥梁。

既能在Activity之间沟通,又能在Activity和Service之间沟通,也能在Activity和Broadcast之间沟通。总结为:Intent用于处理Android各组件之间的通信,工作有:

  1.     Intent需标明本次通信请求从哪里来、到哪里去、怎么走。
  2.     发起方携带本次通信需要的数据内容,接收方对收到的Intent数据进行解包。
  3.     如果发起方要求判断接收方的处理结果,Intent就要负责让接收方传回应答的数据内容。
Intent组成元素的列表说明
元素名称设置方法说明与用途
ComponentsetComponent组件,用于指定Intent的来源与目的
ActionsetAction

动作,用于指定Intent的操作行为

DatasetData即Uri,用于指定动作要操纵的数据路径
CategorysetCategory类别,用于指定Intent的操作类别
TypesetType数据类型,用于指定Data类型的定义
ExtrassetExtras扩展信息,用于指定装载的参数信息
FlagssetFlagsb标志位,用于指定Intent的运行模式(启动标志)

    表达Intent来往路径分为:显示Intent和隐式Intent。

  • 显示Intent,直接指定来源类与目标类名,属于精确匹配。

              在声明一个Intent对象时,需要指定两个参数,第一个参数表示跳转的来源页面,第二个参数表示接下来要跳转到的页面类。具体的生命方式有以下三种:

               (1)在构造函数中指定:

                        Intent intent = new Intent(this,ActResponseActivity.class);

               (2)调用setClass方法指定:

                        Intent intent = new Intent();
                        intent.setClass(this,ActResponseActivity.class);

               (3)调用setComponent方法指定:

                        Intent intent = new Intent();
                        ComponentName component = new ComponentName(this,ActResponseActivity.class);
                        intent.setComponent(component);

  • 隐式Intent,没有明确指定要跳转的类名,只给出一个动作让系统匹配拥有相同字串定义的目标,属于模糊匹配。

定义好的动作名称是一个字符串, 可以是自己定义的动作,也可以是已有的系统动作。

 

系统动作的取值说明
Intent类的系统动作常量名系统动作的常量值说明
ACTION_MAINandroid.intent.action.MAINApp启动时的入口
ACTION_VIEWandroid.intent.action.VIEW显示数据给用户
ACTION_EDITandroid.intent.action.EDIT显示可编辑的数据
ACTION_CALLandroid.intent.actionCALL拨号
ACTION_DIALandroid.intent.action.DIAL打电话
ACTION_SENDandroid.intent.action.SEND发短信
ACTION_ANSWERandroid.intent.action.ANSWER接电话
ACTION_SEARCHandroid.intent.action.SEARCH导航栏上SearchView的搜索动作

              这个动作名称通过setAction方法来指定,也可以通过构造函数Intent(String action)直接生成Intent对象。

             当然,由于动作是模糊匹配,因此有时需要更详细的路径,比如知道某人住在哪个小区,并无法直接找到他家,还得说明他住在该小区的哪一期、哪号楼、哪一层、哪一个单元。Uri和Category便是这样的路径与门类信息,Uri数据可通过构造函数Intent(String action,Uri uri)在生成对象时一起指定,也可通过setData【setUri】方法指定;Category可通过addCategory方法指定,之所以用add而不用set方法,是因为一个Intent可同时设置多个Category,一起进行过滤。

             调用系统拨号程序的例子,其中就用到了Uri:

                     Intent intent = new Intent();
                     intent.setAction(Intent.ACTION_CALL);
                     Uri uri = Uri.parse("tel:"+"15960238696");
                     intent.setData(uri);
                     startActivity(intent);

            隐式Intent用到过滤器的概念,把不符合匹配条件过滤掉。剩下符合条件的优先顺序调用,其中创建一个Android工程,AndroidManifest.xml里的intent-filter就是XML中的过滤器。我们最常见的主页面MainActivity的activity节点下面设置了action和category过滤条件。其中,android.intent.action.MAIN表示App的入口动作,android.intent.category.LAUNCHER表示在App启动时调用。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值