`

Android如何解析Intent Filter

阅读更多

匿名性质的运行时绑定使得理解Android如何解析一个隐式Intent到一个特定的应用程序组件变得重要。

 

和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。

 

决定哪个Activity来运行的过程称为Intent解析。Intent解析的目的是通过下面的过程找到可能匹配得最好的Intent Filter

 

1. Android把安装的包中可获得的Intent Filter放到一个列表中。

 

2. 动作和与正在解析的Intent的种类不关联的Intent Filter会从列表中删除。

 

2.1. 动作匹配指Intent Filter包含特定的动作或没有指定的动作。一个Intent Filter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个Intent Filter在算作是动作匹配检查失败。

 

2.2. 种类匹配更为严格。Intent Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配。

 

3. 最后,Intent的数据URI中的部分会与Intent Filter中的data标签比较。如果Intent Filter定义schemehost/authoritypathmimetype,这些值都会与IntentURI比较。任何不匹配都会导致Intent Filter从列表中删除。

 

没有指定data值的Intent Filter会和所有的Intent数据匹配。

 

3.1. mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果Intent Filter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。

 

3.2. schemeURI部分的协议——例如,http:mailto:tel:

 

3.3. host-name或“data authority”是介于URIschemepath之间的部分(例如,www.google.com)。匹配主机名时,Intent Filterscheme也必须通过匹配。

 

3.4. 数据path是紧接在“data authority”的后面(例如,/ig)。path只在schemehost-name部分都匹配的情况下才匹配。

 

4. 如果这个过程中多于一个组件解析出来的话,它们会以优先度来排序,可以在Intent Filter的节点里添加一个可选的标签。最高等级的组件会返回。

 

Android本地的应用程序组件和第三方应用程序一样,都是Intent解析过程中的一部分。它们没有更高的优先度,可以被新的Activity完全的代替,这些新的Activity宣告自己的Intent Filter能响应相同的动作请求。

 

分享到:
评论

相关推荐

    Android解析Intent Filter的方法

    主要介绍了Android解析Intent Filter的方法,较为详细的分析了Intent解析的原理与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Android Intent Filter用法

    这个例子主要讲下Intent Filter的用法。对应博客地址:http://blog.csdn.net/chenliqiang12345678/article/details/50568468

    Android_Intent和Intent_Filter详解

    Android_Intent和Intent_Filter详解

    Android Intent和Intent Filter详解

    Intents and Intent Filters  三种应用程序基本组件——activity, ... 在上述三种情况下, android系统会自己找到合适的activity, service, 或者 broadcast receivers来响应intent. 三者的intent相互独立互不干扰.

    详解Android中Intent对象与Intent Filter过滤匹配过程

    如果对Intent不是特别了解,可以参见博文《详解Android中Intent的使用方法》,该文对本文要使用的action、category以及data都进行了详细介绍。如果想了解在开发中常见Intent的使用,可以参见《Android中Intent习惯...

    Intent filter 关于Action、Category属性详解源码

    Intent filter 关于Action、Category属性详解源码 对应的博客文章链接: http://blog.csdn.net/a13429921973/article/details/9271973

    Android Intents and Intent Filters(二)源代码

    Android Intents and Intent Filters(二)源代码 对应博客 http://blog.csdn.net/michael__li/article/details/6950127

    Data、Type属性与Intent-filter配置

    Data、Type属性与Intent-filter配置首界面如图4所示,点击“查看图片”可以选择3个符合条件的Activity显示分别以全屏、图5和缩小三个不同的Activity显示图片。

    Android中Intent习惯用法

    如果对Intent Filter不是特别了解,可以参见《详解Android中Intent对象与Intent Filter过滤匹配过程》。 本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信、发送邮件、启动摄像机...

    Android中的Intent Filter匹配规则简介

    主要为大家详细介绍了Android中的Intent Filter匹配规则,感兴趣的小伙伴们可以参考一下

    Android Intent 组件通信与广播消息

    Android组件通信与广播消息,Intent与Intent-filter详解

    android 8.1设置添加Ethernet功能选项

    <category android:name="com.android.settings.SHORTCUT" />+ </intent-filter> <meta-data android:name="com.android.settings.FRAGMENT_CLASS" android:value=...

    Android Intent 过滤例子

    一个非常简单的Android intent 匹配过滤的例子,给初学者参考

    android edittext不弹出软键盘三种方法

    android edittext不弹出软键盘三种方法“: ... <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

    Intents 和Intent filter 理论介绍

    本文是android开发中消息机制Intent 理论部分的详细介绍与分析。通过本文会了解android上层各个应用组建是如何通信和发生松散耦合的。

    Google Android揭秘第三章实例.rar

    <action android:name="android.intent.action.MAIN" /> android:name="android.intent.category.LAUNCHER" /> </intent-filter> <activity android:name="ReviewList" android:label="@...

    Android初学习之intent-filter意图过滤器

    使用 Intent Filter ,应用程序组件告诉 Android ,它们能为其它程序的组件的动作请求提供服务,包括同一个程序的组 件、本地的或第三方的应用程序。 注:因为是初学,我们在这里只浅谈activity并进行一些实验,了解...

    Android Intent 、intent-filter详解

    参考...,讲解的很好 1.什么是Intent(定义) Intent这个单词的意思就是”意图,目的,意向”,Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。 个

Global site tag (gtag.js) - Google Analytics