fillter的过滤规则

本文详细介绍了Android中的Intent机制,包括显式启动与隐式启动的区别,以及action、data和category的匹配规则。此外,还提供了查询Activity是否能匹配指定Intent的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接:http://blog.youkuaiyun.com/mynameishuangshuai/article/details/51673273

启动activity 、 service、IntentReceiver的时候可以是显式启动,也可以是隐式。

    显式启动
        Intent intent = new Intent(MainActivit.this, NewActivity.class);
        startActivity(intent );
     隐式启动
        intent的发送这并不关心接收者是谁,有利于intent 发送者合接受者之间的解耦
        
        1:action匹配规则:
            intent中只能设置一个action,  intent-filter 中可以设置多个action
            intent中设置action的的方法有两种:   1、new Intent(“action字符串”);        2、intent.setAction(“action字符串”);
            action字符串可以是系统的也可以是自定义的(一般是包名结构.常量)
             只要 intent-filter 中包含了intent中的action,就代表这个intent匹配成功

        2:data的匹配规则

          data的匹配规则合action的类似,它也要求intent中必须含有data数据,并且data数据能够完全匹配过滤规则钟的某一个data,这里的完全匹配是指过滤规则中出现的data部分也出现在intent的data中。

           Intent的uri可通过setData方法设置,mimetype可通过setType方法设置。
           data由两部分组成:MineType 和 URI
                MineType指的是媒体类型,例如imgage/jpeg,auto/mpeg4和viedo/*等,可以表示图片、文本、视频等不同的媒体格式
                uri则由scheme、host、port、path | pathPattern | pathPrefix这4部分组成
                需要注意的是:若Intent Filter的data声明部分未指定uri,则缺省uri为content或file,Intent中的uri的scheme部分需为content或 file才能匹配;若要为Intent指定完整的data,必须用setDataAndType方法,究其原因在,setData和setType方法的 源码中我们发现:
                    public Intent setData(Uri data) {
                            mData = data;
                            mType = null;
                            return this;
                    }
                    public Intent setType(String type) {
                            mData = null;
                           mType = type;
                            return this;
                    }
        3:category匹配规则
            intent可以有0~n个,如果不设置则系统会默认添加一个android.intent.category.DEFAULT
            intent-filter 中可以设置多个category
             category要求Intent可以没有category,但是一旦发现存在category,不论你有多少,每个都要能够和过滤规则中的任何一个category相同,是包含和被包含的关系

附录:
    查询是否有Activity可以匹配我们指定Intent的组件
        采用PackageManager的resolveActivity或者Intent的resolveActivity方法会获得最适合Intent的一个Activity
        调用PackageManager的queryIntentActivities会返回所有成功匹配Intent的Activity





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值