概述
隐式调用需要Intent能够匹配目标组件的IntentFilter(<activity>标签中的<intent-filter>)中所设置的过滤信息
IntentFilter的过滤信息包括action,category,data
只有一个Intent同时匹配 action,category,data才算完全匹配
一个activity可以有多个<intent-filter>标签,intent只有匹配任何一组<intent-filter>标签就可以启动activity
action :
系统预定义了一些action,我们也可以自定义一些action
匹配规则是intent的action和activity的action的字符串完全一样,一个过滤规则可以有多个action,只要任何一个action相同就算匹配成功
注意字符串区分大小写
category:
Intent可以没有category,但是有几个category就必须都匹配上activity中的其中一个
为什么没有category也可以匹配上呢
因为activity必须添加默认category为"android.intent.category.DEFAULT",并且intent没有category启动时会默认加上"android.intent.category.DEFAULT"
data:
data匹配规则和action一样
data的结果由mineType和URI组成
mineType指媒体类型,比如image/jpeg,audio/mpeg4-generic,viede/*等,可以表示图片,文本,视频等不同媒体格式
URI包含的项就比较多了,scheme模式,host主机名,port端口号,path完整路径,pathPattern可以带通配符的完整路径,pathPrefix路径前缀
过滤规则的data带有URI默认值为file和content
intent.setDataAndType(p1,p2),如果先setType再setData会相互覆盖(不知道当前版本是否依旧)
____________________________分割线_____________________________
我们可以在隐式intent启动前判断一下是否存在能匹配到的activity
用PackageManager的resolveActivity方法判断或者intent的resolveActivity(返回最佳匹配activity信息)
PackageManager还提供queryIntentActivity方法判断所有能匹配到的activity
主activity过滤规则包括
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
最后
以上就是秀丽小鸭子为你收集整理的Android Intent隐式启动的匹配规则的全部内容,希望文章能够帮你解决Android Intent隐式启动的匹配规则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复