Android中IntentFilter匹配规则详解——Android开发艺术探索笔记
2016-02-06 14:51
537 查看
欢迎转载,转载请注明出处/article/3650333.html
启动Activity的方式分为两种,显示和隐式调用。显示调用很简单,直接指明要启动的Activity就可以了,这里主要介绍一下隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。只有一个Intent同时匹配action,category和data才算匹配成功。
添加方法
注:
一个intent-filter中可以有多个action
intent中的action与intent-filter中有一个相同即可
action区分大小写;
注:
intent中可以不存在category,但如果存在就必须匹配intent-filter其中一个
系统在startActivity或者startActivityForResult的时候默认为Intent加上一个android.intent.category.DEAFAULT,所以必须在intent-filter中加上android.intent.category.DEFAULT这个category
URI格式如下:
注:
虽然没有指定URI,但是URI有默认值,默认值为content和file,所以intent的URI部分必须为content或者file才可以。
下面的方法可以匹配他
在使用隐式Intent时可以先对是否有相应的Activity做出判断,以防出错。采用PackageManager的resolveActivity方法或者Intent的resolveActivity,如果匹配不到就返回null。
MATCH_DEFAULT_ONLY的目的是去除那些category中不含DEFAULT的Activity。
欢迎转载,转载请注明出处/article/3650333.html
启动Activity的方式分为两种,显示和隐式调用。显示调用很简单,直接指明要启动的Activity就可以了,这里主要介绍一下隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。只有一个Intent同时匹配action,category和data才算匹配成功。
示例
[code]<intent-filter> <action android:name="com.sparkyuan.c" /> <action android:name="com.sparkyuan.d" /> <category android:name="com.sparkyuan.c" /> <category android:name="com.sparkyuan.d" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter>`
action匹配规则
action是一个字符串,系统预定义了一些action,我们也可以自己定义action。添加方法
[code]intent.setAction("com.sparkyuan.a");
注:
一个intent-filter中可以有多个action
intent中的action与intent-filter中有一个相同即可
action区分大小写;
category匹配规则
添加方法[code]intent.addCategory("com.sparkyuan.d");
注:
intent中可以不存在category,但如果存在就必须匹配intent-filter其中一个
系统在startActivity或者startActivityForResult的时候默认为Intent加上一个android.intent.category.DEAFAULT,所以必须在intent-filter中加上android.intent.category.DEFAULT这个category
data匹配规则
data语法
[code]<data android:scheme="http" android:host="www.baidu.com" android:port="80" android:path="string" android:pathPattern="string" android:pathPrefix="string" android:mimeType="text/plain" />
组成
data由两部分组成,mimeType和URI。URI格式如下:
<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>] //示例 content://com.example.project:200/folder/subfolder/etc
匹配规则
匹配规则与action类似,只要有一个data匹配就可以。注:
[code]<data android:mimeType="text/plain" />
虽然没有指定URI,但是URI有默认值,默认值为content和file,所以intent的URI部分必须为content或者file才可以。
下面的方法可以匹配他
intent.setDataAndType(Uri.parse("file://abc"),"text/plain");
最后
intent-filter的规则对于Service和BroadcastReceiver是一样的,但是对于Service建议尽量使用显示方法来启动。在使用隐式Intent时可以先对是否有相应的Activity做出判断,以防出错。采用PackageManager的resolveActivity方法或者Intent的resolveActivity,如果匹配不到就返回null。
[code]contex.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); intent.resolveActivity(getPackageManager());
MATCH_DEFAULT_ONLY的目的是去除那些category中不含DEFAULT的Activity。
欢迎转载,转载请注明出处/article/3650333.html
相关文章推荐
- 【Android】4.4 示例--列出手机上的所有联系人
- 【Android】4.3 屏幕布局和旋转
- Android Studio2.0 Beta 2版本更新说明及注意事项
- 【Android】4.2 资源限定符和可视化选项
- 【Android】4.0 Android项目的基本结构
- android Notification 的使用
- Android中asset文件夹和raw文件夹区别
- Lenovo k860i 移植Android 4.4 cm11进度记录【下篇--实时更新中】
- Android之旅十八 百度地图环境搭建
- Android Studio使用教程(二)
- Android Studio使用教程(一)
- Android Studio 导出APK
- Android Studio 签名打包过程图解
- android:使用mediaplayer播放res/raw文件夹中的音乐
- Android Studio的代码混淆
- Android 中实现分享和第三方登陆---以新浪微博为例
- 【转】SEAndroid安全机制框架分析
- JNI Android Studio 调试
- Android设计中的.9.png与Android Studio中的设置
- android studio 图片资源的放置位置