Android-IntentFilter的匹配规则全解

什么是IntentFilter

在Android开发中,有显示和隐式两种启动Activity。其中显示非常简单,而隐式调用就涉及到了IntentFilter,这是Intent的一种匹配规则,想隐式的调用特定的Activity,就必须要让Intent匹配想要启动的Activity的IntentFilter。

IntentFilter说明

  • IntentFilter中有action、category、data三个类别,每个类别都可以有多个;
  • 一个Activity可以有多个IntentFilter,Intent只需要成功匹配一个IntentFilter即可启动对应的Activity;
  • Intent需要同时匹配IntentFilter中的action、category、data三个类别,才算完全匹配;
  • Inten中的action字符串和IntentFilter中的action字符串完成相同即算匹配(大小写敏感);

action匹配规则

  • 一个Intent中只会存在一个action,只要action匹配中IntentFilter中的任意一个action即算匹配成功;
  • 需要注意的是,如果Intent中没有action,则匹配失败;
  • Inten中的category字符串和IntentFilter中的category字符串完成相同即算匹配(大小写敏感);

category匹配规则

  • Intent的启动对象是Activity时,系统会默认给Intent添加一个值为"android.intent.category.DEFAULT"的category
  • Intent中可以有多个category;
  • 不管Intent中有多少个category,每一个category都需要能够在IntentFilter中找到能够匹配的值才算完全匹配;

data的匹配规则

  • data由mimeType和URI组成,mimeType指媒体类型;
  • 一个Intent中只会存在一个data,只要data匹配中IntentFilter中的任意一个data即算匹配成功;
  • 需要调用setDataAndType才能同时设置data和type两个值,单独设置其中一个值会覆盖另一个值;

注意事项

  • 隐式调用Activity时,最好先调用Intent的resolveActivity或者PackageManager的resolveActivity或queryIntentActivities方法来验证是否有匹配的Activity,否则会抛出异常
  • 另外,IntentFilter的匹配规则对于Service和BroadcastReceiver同样适用;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值