我是靠谱客的博主 娇气往事,最近开发中收集的这篇文章主要介绍隐式Intent匹配规则一、基本概念二、PendingIntent三、Intent匹配规则四、代码中的匹配查找:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、基本概念

隐式Intent:不指定组件,而是通过要进行的操作来选择处理它的组件;

操作(Action):指定要执行的通用操作,操作在很大程度上决定了其余 Intent的构成,特别是数据和 extra 中包含的内容;

数据(Data):待操作数据和/或该数据的MIME类型的URI。可以指定某一个或者都指定;

类别 (category)一个包含应处理 Intent 组件类型的附加信息的字符串;

Extra:存放键值对,用于启动后组件可以使用;

标志(flag):指定Android系统如何启动Activity。

tip:尽量不用intent启动service,而是直接启动,因为你看不见哪个service启动了,所以有的功能可能就无法实现。

二、PendingIntent

用例包括:
1.Notification执行操作所要执行的Intent;
2.应用小部件执行操作要执行的Intent;
3.AlarmManager在未来某段时间要执行的Intent。
声明组件类型:
1.PendingIntent.getActivity(),用于启动Activity的intent;
2.PendingIntent.getService(),用于启动Service的intent;
3.PendingIntent.getBroadcast(),用于启动BroadcastReceiver的intent;

三、Intent匹配规则


action:

a.Intent中指定的Action必须与过滤器中的某一个匹配;

b.如果过滤器中没有指定任何的Action,则Intent默认没有匹配项,所有的隐式Intent均无法启动该组件;

c.如果Intent未指定任何Action,则可以匹配过滤器(过滤器至少包含一个Action)。

category:

a.Intent中的每个category必须与过滤器中的category匹配,但过滤器中的category可以更多;
b.Android会自动将CATEGORY_DEFAULT自动添加到用于startActivity()或startActivityForResult()的所有隐式Intent,
c.因此要想Activity接受隐式Intent,必须将android.intent.category.DEFAULT添加到过滤器中。

data:

URI匹配规则:

URI格式:<scheme>://<host>:<port>/<path>,其中每个属性都是可选的,但是存在线性依赖关系,如下:
a.未指定scheme,忽略host;
b.未指定host,忽略port;
c.未指定scheme和host,忽略path。
将Intent中URI与过滤器中的URI相比较时,只会与过滤器中包含的部分URI做比较,如下:
a.如果过滤器只指定scheme,则所有的具有该scheme的URI都与该过滤器匹配;
b.如果过滤器只指定了scheme和权限,则所有具有该scheme和权限的URI都与该过滤器匹配;
c.如果过滤器制定了scheme、权限和路径,那么只有相同的scheme、权限和路径的URI可以匹配;
d.路径可以包含通配符(*),因此仅需部分匹配路径即可。

data匹配规则:

a.仅当过滤器未指定任何URI与MIME类型时,不含URI和MIME类型的intent才会匹配;
b.对于包含URI但不含MIME类型的Intent,仅当URI匹配,且过滤器也不含MIME类型时才会匹配;
c.当过滤器列出MIME类型,但未指定URI格式,只有列出相同MIME类型,且不含URI的Intent才会匹配;
d.当intent中MIME类型与过滤器中的类型相匹配时,该intent如果包含了URI也可以匹配;
如果intent的URI与过滤器的URI匹配,或者Intent具有content:或file:这样的URI,但过滤器未指定URI,
则可以匹配URI部分,也就是说如果过滤器只列出了MIME类型,则默认其支持content:或file:数据。

四、代码中的匹配查找:

PackageManager中提供了一系列的query方法来查找待定的Intent,以及resolve方法来确定响应Intent的最佳组件。
queryIntentActivities()查找匹配的activity列表;

queryIntentServices()查找匹配的Service列表;

queryBroadcastReceivers()查找匹配的广播接收器。

最后

以上就是娇气往事为你收集整理的隐式Intent匹配规则一、基本概念二、PendingIntent三、Intent匹配规则四、代码中的匹配查找:的全部内容,希望文章能够帮你解决隐式Intent匹配规则一、基本概念二、PendingIntent三、Intent匹配规则四、代码中的匹配查找:所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部