Intent过滤器的原理与匹配机制
1.原理
Intent过滤器能够根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,匹配和筛选适合接收该Intent的组件。可以注册Intent过滤器的组件有:Activity、Service、BroadcastReceiver。
组件注册Intent过滤器的方法: 在AndroidManifest.xml文件的各个组件下定义<intent-filter>
节点,然后在节点中声明该组件所支持的动作(<action>
标签)、类别(<category>
标签)和数据格式(<data>
标签)等信息。
2.匹配机制
每启动一个activity时,需要将Intent与Intent过滤器进行匹配。
Android系统会将所有Intent过滤器的 “动作action”、“类别category” 和 “数据data” 与当前Intent进行匹配,任何不匹配的Intent过滤器都将被过滤掉。如果Intent过滤器的匹配结果多于一个,则可以根据在<intent-filter>
标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择。
没有指定“动作”的Intent过滤器可以匹配任何的Intent,但是没有指定“类别”的Intent过滤器只能匹配没有“类别”的Intent。
如何获取Activity返回值
- 父activity通过
startActivityForResult(Intent, requestCode)
启动子activity,当子activity把数据传回父activity时,需要把数据通过intent.putExtra()
函数放入intent中,并通过setResult(resultCode,intent)
把数据返回父activity。 - 当子Activity关闭后,父Activity会调用
onActivityResult(requestCode, resultCode, Intent)
获取子Activity的返回值。由于所有子Activity返回时,父Activity都调用相同的处理函数,所以通过requestCode来判断是哪一个子Activity的返回值。
//Intent用于决定启动哪个Activity
//requestCode用来标识请求的来源
startActivityForResult(Intent, requestCode)
//requestCode判断是哪一个子Activity的返回值
//resultCode表示子Activity的数据返回状态
//Intent是子Activity的返回数据
onActivityResult(requestCode, resultCode, Intent)