Android解析Intent Filter的方法
本文实例讲述了Android解析IntentFilter的方法。分享给大家供大家参考。具体分析如下:
匿名性质的运行时绑定使得理解Android如何解析一个隐式Intent到一个特定的应用程序组件变得重要。
和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。
决定哪个Activity来运行的过程称为Intent解析。Intent解析的目的是通过下面的过程找到可能匹配得最好的IntentFilter:
1.Android把安装的包中可获得的IntentFilter放到一个列表中。
2.动作和与正在解析的Intent的种类不关联的IntentFilter会从列表中删除。
①.动作匹配指IntentFilter包含特定的动作或没有指定的动作。一个IntentFilter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个IntentFilter在算作是动作匹配检查失败。
②.种类匹配更为严格。IntentFilter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的IntentFilter只能与没有种类的Intent匹配。
3.最后,Intent的数据URI中的部分会与IntentFilter中的data标签比较。如果IntentFilter定义scheme,host/authority,path或mimetype,这些值都会与Intent的URI比较。任何不匹配都会导致IntentFilter从列表中删除。
没有指定data值的IntentFilter会和所有的Intent数据匹配。
①.mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果IntentFilter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。
②.scheme是URI部分的协议——例如,http:,mailto:,tel:。
③.host-name或“dataauthority”是介于URI中scheme和path之间的部分(例如,www.google.com)。匹配主机名时,IntentFilter的scheme也必须通过匹配。
④.数据path是紧接在“dataauthority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情况下才匹配。
4.如果这个过程中多于一个组件解析出来的话,它们会以优先度来排序,可以在IntentFilter的节点里添加一个可选的标签。最高等级的组件会返回。
Android本地的应用程序组件和第三方应用程序一样,都是Intent解析过程中的一部分。它们没有更高的优先度,可以被新的Activity完全的代替,这些新的Activity宣告自己的IntentFilter能响应相同的动作请求。
希望本文所述对大家的Android程序设计有所帮助。