目录
- 七大属性
- IntentFilter
1. 七大属性
- 第一类:启动,Component,Action,Category
- 第二类:传值,Data,Type,Extra
- 第三类:启动模式,Flag
注意事项:
- Data属性用来向Action属性提供操作的数据,它接受一个Uri对象
- Data属性和Type属性会进行相互覆盖,若要同时设置应调用Intent的setDataAndType()方法
2. IntentFilter
- 一个Intent要同时匹配action类别、category类别、data类别才算完全匹配。一个Activity可以有多组IntentFilter,一个Intent只要能匹配任何一组IntentFilter就算成功
- action要求Intent中必须有一个action且必须能够和过滤规则中的某个action相同。而category则要求Intent可以没有category,但如果一旦有category,不管有几个,每个都要能和过滤规则中的任何一个category相同
注意事项:
- 在<intent-filter>内部,只允许<action> <data> <category>三种标签。
其中,一般不需要为Activity声明<category>标签 - 启动服务始终使用显示 Intent,且不要为该服务声明过滤器,否则容易造成安全隐患,不加过滤器的 Activity 只能由显示Intent启动
- 系统在调用startActivity()或startActivityForResult()默认加上了“android.intent.category.DEFAULT”这个category。要我们的activity能够被隐式启动,就必须加上这个category
- <intent-filter/>中data标签需要配合action标签一起使用,单独只有data标签是无法匹配隐式Intent的。若data中没有指定Uri,默认为content和file,即scheme值需要为content或file才能匹配成功
- 通过隐式Intent启动一个activity时,最好判断一下是否有activity能够匹配该隐式的activity,PackageManager提供了queryIntentActivities()和resolveActivity()方法,要使用MATCH_DEFAULT_ONLY这个标记位
- 要确保只有自己的应用才能启动相关组件,请将争对该组件的过滤器的 exported 属性设置为 "false"