IntentFilter过滤规则
2016-05-26 01:15
435 查看
action匹配规则
隐式调用必须指定一个action,只要能匹配上过滤器中多个action的任意一个就行。category匹配规则
category可有可无,可以指定多个category,多个category中的任意一个都必须能在过滤器中找到。系统在startActivity或者startActivityForResult时会为Intent加上”android.intent.category.DEFAULT”这个category。data匹配规则
data由两部分组成:mimeType和URI。mimeType指定媒体类型,如image/jpeg、audio/mpeg4-generic。过滤规则中如果没有指定URI,会有默认值content和file,这种情况下,必须为content或者file才能匹配。如果要为Intent指定完整的data,必须调用setDataAndType方法,不能先setData再setType,这两个方法会彼此清除对方。
最后,如果隐式调用activity,在没有匹配到时会报错。所以可以加个判断:用PackageManager的resolveActivity或者Intent的resolveActivity,如果找不到匹配的activity就会返回null。另外,PackageManager方法还提供了queryIntentActivities,这个方法和resolveActivity的不同在于,它不是返回最佳匹配的Activity,而是返回所有匹配的Activity。
public abstract List<ResolveInfo> queryIntentActivities(Intent intent, int flags); public abstract ResolveInfo resolveActivity(Intent intent, int flags);
第二个参数使用MATCH_DEFAULT_ONLY这个标记位,表明只匹配那些”android.intent.category.DEFAULT”的。如果不用该标记位,那么就会把那些不含”android.intent.category.DEFAULT”的activity也匹配出来,而因为系统在startActiivty或者startActivityForResult时又会默认加上”android.intent.category.DEFAULT”,这个时候可能就会匹配不到导致失败。
相关文章推荐
- Navicat
- Linux 网络 I/O 模型简介(图文)
- LeetCode 149. Max Points on a Line(直线上的点)
- 通过srvctl add命令添加database信息到srvctl管理器
- LeetCode 045 Jump Game II
- HTML文档设置标记
- LeetCode 150. Evaluate Reverse Polish Notation(计算后缀表达式)
- View事件分发机制
- expect 示例
- Android M InCallUI动画简析
- Base64编码与解码
- C++第六次作业
- LeetCode 151. Reverse Words in a String(反转单词)
- 数据挖掘之 时间序列分析
- LeetCode 152. Maximum Product Subarray(最大乘积)
- Android--Toast时间
- 初试Twitter API
- 2015年职级评定总结
- 1039. Course List for Student (25)
- LeetCode 153. Find Minimum in Rotated Sorted Array(旋转数组查找)