05-IntentFilter的匹配规则
IntentFilter的匹配规则
- 原则上一个Intent不应该既是显示调用又是隐式调用,如果二者共存的话以显式调用为主
- 隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标Activity
- IntentFilter中的过滤信息有action、category、data
- 为了匹配过滤列表,需要同时匹配过滤列表中的action、category、data信息,否则匹配失败
- 一个过滤列表中的action、category和data可以有多个,所有的action、category、data分别构成不同类别,同一类别的信息共同约束当前类别的匹配过程
- 一个Activity可以有多个IntentFilter,只要intent能匹配任意一组就能启动
action的匹配规则
- 允许用户自定义,必须存在
- 要求intent中的action存在且必须和过滤规则中的其中一个action完全相同
- action区分大小写
category的匹配规则
- 允许用户自定义,可以不存在
- 它和action的匹配规则不一样
- 如果intent中含有category,那么所有的category都必须和过滤规则中的一个category相同
- 换句话说,如果intent出现category,那么不管有几个,对于每个来说,它必须是过滤规则中已经定义的
- 如果intent中没有category,这个intent仍可以匹配成功
action和category匹配规则的区别
- action要求intent中必须有一个action,且必须和intent-filter中的某个action相同
- category要求intent中可以没有category,但是如果一旦有category,不管有几个,每个都要和intent-filter中的任何一个相同
为什么可以不用设置category
- 因为系统在调用startActivity或startActivityForResult的时候会默认加上一个default的category
- 为了我们的activity能够接收隐士意图,就必须在intent-filter中指定default这个category
data的匹配规则
- 必须存在,并且完全匹配intent-filter中的某一个data
- data的匹配和action类似,如果intent-filter中定义了data,那么intent中也要定义可匹配的data
- data由两部分组成,mimeType和uri
- mimeType指媒体类型
- uri主要包含:
- scheme:uri的模式,如果uri没有指定scheme,那么整个uri的其他参数无效,这也意味着uri也无效
- host:主机名,同上,如果不指定host,整个uri也是无效的
- port:端口号,仅当uri指定了scheme和host以后,port才有效
- path/pathPattern/pathPrefix:表述路径信息
- path:表示完整的路径信息
- pathPattern:也表示完整的路径信息,但是它可以包含通配符星号,表示0个或多个任意字符,注意正则表达式规范
- pathPrefix表示路径的前缀信息
data匹配的注意事项
- mimeType是image的,如果intent-filter没有指定uri,则uri的默认值为content和file
- intent的setData和setType会彼此清除对方的值,从源码可得知
- 如果要为intent指定完整的data,必须要调用setDataAndType方法,传递两个参数uri和type
- data中的scheme和uri可以分开写,这是和action的区别
其他
- 也可以使用intent-filter打开service和broadcast
- 但是系统对service的建议是尽量使用显示调用方式来启动服务
- 为了避免使用隐式意图找不到activity,需要进行判断
- 使用PackageManager中的resolveActivity方法
- 使用Intent中的resolveActivity方法
- 如果找不到activity就会返回null,通过判断返回值避免程序发生崩溃
- 另外PackageManage也提供了queryIntentActivities方法,这个方法和resolveActivity方法的不同之处在于,它不是返回最佳匹配,而是返回所有成功匹配的activity信息
- 不含default的category的activity是无法接收隐式意图的,所以在匹配的时候需要使用flag参数
重要的action和category
- android.intent.action.MAIN
- android.intent.category.DEFAULT
- 这两者的共同作用是用来标明这是一个入口Activity,并且会出现在系统的应用列表中
- 少了任何一个都没有实际意义,也无法出现在系统的应用列表,也就是两者缺一不可
- 同样,通过PackageManager也可以获取成功匹配的service和broadcastReceiver的组件信息
05-IntentFilter的匹配规则的更多相关文章
- Android开发——IntentFilter的匹配规则
1. IntentFilter中的过滤信息 启动Activity分为显式调用和隐式调用,前者没什么好讲的,后者需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息.包括act ...
- 【Android - 组件】之IntentFilter的匹配规则
我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ...
- Nginx之location 匹配规则详解
有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...
- Nginx localtion匹配规则
mark:2016年05月25日13:20:54 (存手打,拒绝转载) 一.location分为 普通location 和 正则location 只有带有 "~" 或者" ...
- Intent 匹配规则
1.在AndroidManifest.xml中可以为 每个 Activity,Service 设置多个Intent-Filter; 在系统启动和程序安装之后,android会收集AndroidMani ...
- Android中的Intent Filter匹配规则介绍
本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...
- 前端开发掌握nginx常用功能之server&location匹配规则
nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...
- 《Android开发艺术探索》读书笔记之IntentFillter的匹配规则
使用intent启动不同组件的方法 组件类型 启动方法 Activity startActivity(Intent intent) startActivityForResult(Intent inte ...
- 在JaveWeb项目中配置Spring 匿名访问时,匹配规则的变相实现/*
实现/* /** * 根据当前的URL返回该url的角色集合. * 1.如果当前的URL在匿名访问的URL集合当中时,在当前的角色中添加匿名访问的角色(SysRole.ROLE_CONFIG_ANON ...
随机推荐
- 【雕爷学编程】Arduino动手做(49)---有源蜂鸣器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- React组件proptypes, ref
一.使用props.children访问嵌套数据 import React from 'react'; class Button extends React.Component { render () ...
- DOM面试题
1.利用冒泡和不利用冒泡的差别 答案: 1.绑定位置不同:不利用冒泡绑定在目标元素上,利用冒泡绑定在父元素上. 2.监听对象的个数不同:不利用冒泡会反复创建多个监听,利用冒泡始终只有 一个监听. 3. ...
- jQuery中prevAll得到的DOM元素顺序问题
学习笔记,记录下学习中遇到的问题. 使用jQuery中的prevAll可以查找当前元素之前所有的同辈元素,但是却存在一个问题:得到的同辈元素的为正常顺序的反方向. 举个例子: <!doctype ...
- 201771010128王玉兰《面向对象程序设计(Java)》第八周学习总结
第一部分:理论知识部分总结 (1)接口:接口不是类,而是对类胡一组需求描述,由常量肯一组抽象方法组成. a:接口中不包括变量和有具体实现的方法 b:只要类实现了接口,则该类要遵从接口描述的统 一格式进 ...
- 玩转Nginx location配置
原文链接:https://mp.weixin.qq.com/s/kaEtfmX9bVdKfCVY6gbOsQ 建议点击原文链接查看 nginx是一个跨平台的web服务器, 基于事件驱动的架构并发处理百 ...
- 【Mac】pip自定义源【永久有效】
鉴于国内网络环境,pip安装比较慢已成为不争的事实,通过以下几步轻松解决 1.创建文件夹 mkdir -/.pip 2.创建配置文件 vim -/.pip/pip.conf mkdir ~/.p ...
- ECharts使用教程
引入 ECharts ECharts 3 开始不再强制使用 AMD 的方式按需引入,代码里也不再内置 AMD 加载器.因此引入方式简单了很多,只需要像普通的 JavaScript 库一样用 scrip ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理
上一篇文章(https://www.cnblogs.com/meowv/p/12956696.html)成功使用了Redis缓存数据,大大提高博客的响应性能. 接下来,将完成一个任务调度中心,关于定时 ...
- (板子)缩点 + DAG上的DP(深搜)luogu P3387
板子传送门 根据题目意思,我们只需要找出一条点权最大的路径就行了,不限制点的个数.那么考虑对于一个环上的点被选择了,一整条环是不是应该都被选择,这一定很优,能选干嘛不选.很关键的是题目还允许我们重复经 ...