Intent 的中文名是意图,意思是我想让你干什么,简单的说,就是传递数据。Intent是各个组件之间信息沟通的桥梁。既能在Activity之间沟通。又能在Activity 与Service之间沟通。也能在Activity与Broadcast 之间沟通。
一、完成的工作主要有3部分:
1.Intent 需要标明本次通信请求从哪里来。到哪里去、要怎么走。
2.发起方携带本次通信需要的数据内容,接收方对收到对Intent数据进行解包。
3.如果发起方要求判断接收方的处理结果,Intent就要负责让接收方传回应答的数据内容
为了做好以上工作,就要给Intent 配上必须的装备,Intent的组成部分见下表
二、显式Intent 直接指定来源类,属于精确匹配
在声明一个Intent 对象时,需要指定两个参数,第一个参数表示跳转的来源页面,第二个参数表示接下来要跳转到的页面类。如下3种方法:
1. 构造函数中指定
new Intent(this,ObjActivity.class)
2.调用setClass指定
Intnet intent = new Intent()
intent.setClass(this,ObjActiviy.class)
3.调用setComponent方法指定
Intnet intent = new Intent()
ComponentName component = new ComponentName(this,ObjeActivity.class)
三、隐式Intent ,没有明确指定要跳转的类名,只给出一个动作让系统匹配拥有相同字串定义的目标,属于模糊匹配。
因为常常不希望直接暴露源码的类名,只给出一个事先定义好的名称,因此Intent起到了过滤作用。这个定义好的动作名称是一个字符串,可以是自己定义的动作,也可以是已有的系统动作,系统动作的取值说明如下表:
这个动作名称通过setAction方法指定,也可以通过构造函数Intent(String action)直接生成Intent对象 Uri 和Category便是这样的路径与门类信息。Uri数据可通过构造函数Intent(String action,Uri uri)在生成对象时一起指定,也可通过setData方法指定(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。action。MAIN表示App的 入口动作,android.intent.category.LAUNCHER表示App启动是调用<activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>