时间:2021-05-21
IntentFilter的匹配规则
IntentFilter的使用
假如我们要隐式启动一个Activity我们需要成功匹配activity中的任意一个intent-filter。如果要成功匹配该intent-filter我们需要完全匹配该intent-filter中的 action、category、data。
示例:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="com.blueberry.action"></action> <action android:name="com.blueberry.action1"></action> <category android:name="com.blueberry.category"></category> <category android:name="android.intent.category.DEFAULT"></category> <data android:mimeType="text/plain"></data> </intent-filter></activity>如果activity的过滤列表如上配置,我们在设置intent的参数时需要同时满足action、category、data才算匹配成功,只有完全匹配才能成功启动activity。(如果是BroadcastReceiver的话,只需要满足action或data类型任意一个即可)。
action的匹配规则
action是一个字符串,系统预定义了一些action,同时我们也可以自己定义自己的action。action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配(字符串值完全一样,区分大小写)。一个过滤规则中可以有多个action,那么只要intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。另外如果过滤规则中定义了action,那么intent中也必须要有可匹配的action。
category的匹配规则
category的匹配规则是Intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。换句话说intent中如果出现了category,都必须和过滤规则中的一个category相同。如果没有category的话,这个intent仍然可以匹配成功(这点和action不同)。至于为什么不设置category也能匹配?原因在于系统在调用startActivity或startActivityForResult的时候会默认加上Android.intent.category.DEFAULT。同时为了我们能够接受隐式调用,我们在AndroidManifest.xml中的intent-filter也要指定”android.intent.category.DEFAULT”这个category。
data的匹配规则
data的匹配规则与action类似,如果过滤规则中定义了data,那么Intent中必须也要定义可匹配的data。同时只要intent中的action能和过滤规则中的任何一个action相同即可匹配成功
data的语法
<data android:host="string" android:path="/string" android:pathPattern="*" android:port="12" android:scheme="string" android:mimeType="text/plain" ></data>data由两部分组成,mimeType和URL。mimeType指媒体类型,比如image/jpeg、audio/mpeg4-generic和video/*等。而URL中包含的数据就比较多了,下面是URL的结构:
<schema>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]例如:
URL实际上是有默认值的URL的默认值为content和File。也就是说如果androidManifest.xml中设置的跟上文一样。我们需要这样才能匹配:
inent.setDataAndType(Uri.parse(file://abc),"text/plain")或intent.setDataAndType(Uri.parse(content://abc),"text/plain")总结
综上所述,如果要隐式启动一个activity。
1. 在androidManifest中查看activity的匹配列表。选择一个intent-filter进行匹配。如果定义有action或data,那我们的intent中也必须要包含可以与它匹配的action或data。
2. 创建intent设置action或者data。category可以设置也可以不设置(如果设置要全部都能匹配)。
3. 保证设置的action、data、category都能正确匹配。
4. 调用启动activity的方法:startActivity或startActivityForResult。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android中ActivityLifecycleCallbacks的实例详解以上就是使用ActivityLifecycleCallbacks的实例,代码注释写
本文实例讲述了Android解析IntentFilter的方法。分享给大家供大家参考。具体分析如下:匿名性质的运行时绑定使得理解Android如何解析一个隐式I
Android自定义阴影效果详解及实例Android5.X中,Google为其增加了两个属性android:elevation=””与android:trans
Android上下滚动TextSwitcher实例详解1.在activity中需要代码声明textSwitcher=(TextSwitcher)findView
Android读取资源文件实例详解本文主要介绍Android读取资源文件,直接从assets读取,从Raw文件中读取,InputStream转String。以下