我是靠谱客的博主 秀丽小鸭子,最近开发中收集的这篇文章主要介绍Android Intent隐式启动的匹配规则,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

隐式调用需要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隐式启动的匹配规则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部