我是靠谱客的博主 含糊月饼,最近开发中收集的这篇文章主要介绍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

最后

以上就是含糊月饼为你收集整理的intentfilter匹配规则的全部内容,希望文章能够帮你解决intentfilter匹配规则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部