intentfilter匹配规则

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由mimeTypeURI组成。
    – 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值