概述
activity的启动方式有两种:显示启动和隐式启动。显示启动很简单,也很常用。隐式启动则需要Intent能够匹配目标activity 在 IntentFilter配置的过滤信息。
Intent和IntentFilter中的过滤信息有Action、Category、Data
action
- action是一个字符串,系统预设了一些action规则,也可以定义自己的action。
- 一个
IntentFilter
可以预设多个Action,但只要Intent中的action能够与任意一个预设的action相同,则匹配成功。 - Action区分大小写
category
- category是一个字符串,系统预设了一些category,可以自定义。
- category有系统默认值。可以不设置,如果在
IntentFilter
自定义了的category规则,则必须加上系统默认的规则。 - 和action的Intent匹配规则不同的是,category中的规则是必须过滤的,所以
IntentFilter
中预设了几个category,则Intent中就必须匹配几个category,否则匹配不成功。
data
- 如果设置了data过滤规则,则Intent中也必须有可匹配的data
- data由
mimeType
和URI
组成。
– mimeType包括:image/jpeg、audio/mpeg4-generic、vidio/*等,可以表示图片、文本、视频等不同的媒体格式
–URI格式:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
data语法格式:
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string" />
启动包含action过滤规则的activity
<intent-filter>
<action android:name="test.zzy.com" />
<action android:name="action_main2" />
<action android:name="action_main3" />
</intent-filter>
Intent构建:
Intent intent = new Intent();
intent.setAction("test.zzy.com");
//Intent中的action只要有一个和intent-filter中的action相同就匹配成功
// intent.setAction("action_main2");//也可以不注释
// intent.setAction("action_main3");//也可以不注释
startActivity(intent);
默认category可以不用单独匹配。
启动包含category的Activity
<intent-filter>
<action android:name="test.zzy.com" />
<action android:name="action_main2" />
<action android:name="action_main3" />
<category android:name="cate_main1" />
<category android:name="cate_main2" />
<category android:name="cate_main3" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Intent构建:
Intent intent = new Intent();
intent.setAction("test.zzy.com");
//Intent中的category必须和intent-filter中的category完全匹配,
// 即intent-filter中有多少category,Intent中也必须有多少category
intent.addCategory("cate_main1");//必须添加
intent.addCategory("cate_main2");//必须添加
intent.addCategory("cate_main3");//必须添加
startActivity(intent);
启动包含data的Activity
<intent-filter>
<action android:name="test.zzy.com" />
<category android:name="cate_main1" />
<category android:name="cate_main2" />
<category android:name="cate_main3" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="www.app.com"
android:mimeType="text/plain"
android:scheme="http" />
</intent-filter>
Intent构建
Intent intent = new Intent();
intent.setAction("test.zzy.com");
intent.addCategory("cate_main1");//必须添加
intent.addCategory("cate_main2");//必须添加
intent.addCategory("cate_main3");//必须添加
intent.setDataAndType(Uri.parse("http://www.app.com"),"text/plain");
startActivity(intent);
也可以不设置URI
<intent-filter>
<action android:name="test.zzy.com" />
<category android:name="cate_main1" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:mimeType="text/plain"
/>
</intent-filter>
Intent构建
Intent intent = new Intent();
intent.setAction("test.zzy.com");
intent.addCategory("cate_main1");
intent.setDataAndType(Uri.parse("file://string"),"text/plain");
startActivity(intent);
- 当过滤规则中没有指定URI时,默认值为content和file。
现在总算是明白了些IntentFilter的匹配规则了。?
参考:https://www.aliyun.com/jiaocheng/13965.html
最后
以上就是含糊月饼为你收集整理的intentfilter匹配规则的全部内容,希望文章能够帮你解决intentfilter匹配规则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复