Android中Action、Category、Data匹配规则

Android 中隐式启动组件的匹配规则主要是根据 Action、Category、Data来匹配。
Action:定义匹配动作,属性值为一个字符串
Category:属性用于指定当前动作(Action)被执行的环境。
Data:用于指定数据,通常是URI格式


Action匹配只要有一个与Intent中携带Action相同即可:
<activity android:name=".androidImplicitFilter.ActionActivity">
            <intent-filter>
                <action android:name="com.action.a" />
                <action android:name="com.action.b" />
                <action android:name="com.action.c" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>

Intent中只要携带"com.action.a"、"com.action.b"、"com.action.c"中的一个就可以启动ActionActivity


Category匹配要包含全部Intent中携带Category
Category是一个字符串,系统中预定义了一些Category,也可以自定义Category
Intent intent = new Intent("com.action.a");
        intent.addCategory("com.category.a");
        intent.addCategory("com.category.b");
        startActivity(intent);
intent包含2个Category ,"com.category.a"、"com.category.b"。要启动的组件必须包含这两个Category
<activity android:name=".androidImplicitFilter.ActionActivity">
            <intent-filter>
                <action android:name="com.action.a" />
                <action android:name="com.action.b" />
                <action android:name="com.action.c" />


                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.category.a" />
                <category android:name="com.category.b" />
                <category android:name="com.category.c" />
            </intent-filter>
        </activity>

Intent默认会携带"android.intent.category.DEFAULT",所以隐式启动的组件必须包含 <category android:name="android.intent.category.DEFAULT" />


Data匹配与Action相同
Data匹配规则与Action类似,Data一般由两部分组成mimeType和URI,mineType指资源类型包括文本、图片、音视频等等
URI结构如下:scheme://host:port/(path|pathPrefix|pathPatten)
例如 http://www.myHost:8080/user/index.html
    content://com.download/file/10089
scheme:URI的协议例如http、file、content,如果URI没有指定scheme,那么这个URI即使有其他部分也是无效的
host:域名,如果未指定那么也没效果,URI也就无效
port:端口号,scheme和host指定时才有效
path|pathPrefix|pathPatten:包含路径信息


假如我们要通过响应一个超连接打开相应的组件,我们可以这样实现:
 <intent-filter>
                <action android:name="android.intent.action.VIEW" />


                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:host="myHost.app"
                    android:scheme="myScheme" />
</intent-filter>


详细请看:Android中Action、Category、Data匹配规则

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ,广播接收者是一种组件,用于接收系统或其他应用程序发送的广播消息。通过注册广播接收者,应用程序可以接收与特定类别(category)相关的广播消息。 广播接收者能够接收到的广播消息是通过 intent 进行传递的。在 intent ,可以指定广播的 actiondatacategory。如果广播接收者注册时指定了与广播消息 category匹配category,则该广播接收者就可以接收到该广播消息。 例如,如果一个应用程序需要接收与网络相关的广播消息,可以在广播接收者的 IntentFilter 添加如下代码: ```xml <receiver android:name=".NetworkReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.NETWORK" /> </intent-filter> </receiver> ``` 在上述代码,`android.intent.category.DEFAULT` 是任何 intent 的默认 category,而 `android.intent.category.NETWORK` 是一个自定义的 category,用于标识与网络相关的广播消息。因此,当系统或其他应用程序发送了一个带有 `android.intent.category.NETWORK` category 的广播消息时,`NetworkReceiver` 就会接收到该广播消息。 需要注意的是,广播接收者可以注册多个 IntentFilter,但每个 IntentFilter 只能包含一个 action 和多个 category。在广播接收者的 `onReceive()` 方法,可以根据接收到的广播消息的 actioncategory 进行相应的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值