文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中IntentFilter匹配规则的示例分析

2023-05-30 20:41

关注

这篇文章将为大家详细讲解有关Android中IntentFilter匹配规则的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

IntentFilter的匹配规则

IntentFilter的使用

假如我们要隐式启动一个Activity我们需要成功匹配activity中的任意一个intent-filter。如果要成功匹配该intent-filter我们需要完全匹配该intent-filter中的 action、category、data。

示例:

<activity android:name=".MainActivity">  <intent-filter>   <action android:name="com.blueberry.action"></action>   <action android:name="com.blueberry.action1"></action>   <category android:name="com.blueberry.category"></category>   <category android:name="android.intent.category.DEFAULT"></category>   <data android:mimeType="text/plain"></data>   </intent-filter></activity>

如果activity的过滤列表如上配置,我们在设置intent的参数时需要同时满足action、category、data才算匹配成功,只有完全匹配才能成功启动activity。(如果是BroadcastReceiver的话,只需要满足action或data类型任意一个即可)。

action的匹配规则

action是一个字符串,系统预定义了一些action,同时我们也可以自己定义自己的action。action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配(字符串值完全一样,区分大小写)。一个过滤规则中可以有多个action,那么只要intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。另外如果过滤规则中定义了action,那么intent中也必须要有可匹配的action。

category的匹配规则

category的匹配规则是Intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。换句话说intent中如果出现了category,都必须和过滤规则中的一个category相同。如果没有category的话,这个intent仍然可以匹配成功(这点和action不同)。至于为什么不设置category也能匹配?原因在于系统在调用startActivity或startActivityForResult的时候会默认加上Android.intent.category.DEFAULT。同时为了我们能够接受隐式调用,我们在AndroidManifest.xml中的intent-filter也要指定”android.intent.category.DEFAULT”这个category。

data的匹配规则

data的匹配规则与action类似,如果过滤规则中定义了data,那么Intent中必须也要定义可匹配的data。同时只要intent中的action能和过滤规则中的任何一个action相同即可匹配成功

data的语法

<data  android:host="string"  android:path="/string"  android:pathPattern="*"  android:port="12"  android:scheme="string"  android:mimeType="text/plain"  ></data>

data由两部分组成,mimeType和URL。mimeType指媒体类型,比如image/jpeg、audio/mpeg4-generic和video/*等。而URL中包含的数据就比较多了,下面是URL的结构:

<schema>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

例如:

content://com.blueberry.text:200/folder/subfolder/etc 或 http://www.baidu.com:80/search/info

另外需要注意如果在androidManifest.xml中的配置列表中没有设置URL只设置了mimeType例如:

<intent-filter>  <action android:name="com.blueberry.second"></action>  <category android:name="android.intent.category.DEFAULT"></category>  <data android:mimeType="text/plain"></data></intent-filter>

URL实际上是有默认值的URL的默认值为content和File。也就是说如果androidManifest.xml中设置的跟上文一样。我们需要这样才能匹配:

inent.setDataAndType(Uri.parse(file://abc),"text/plain")或intent.setDataAndType(Uri.parse(content://abc),"text/plain")

总结

综上所述,如果要隐式启动一个activity。

在androidManifest中查看activity的匹配列表。选择一个intent-filter进行匹配。如果定义有action或data,那我们的intent中也必须要包含可以与它匹配的action或data。

创建intent设置action或者data。category可以设置也可以不设置(如果设置要全部都能匹配)。

保证设置的action、data、category都能正确匹配。

调用启动activity的方法:startActivity或startActivityForResult。

关于“Android中IntentFilter匹配规则的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯