Android解析Intent Filter的方法

作者:craigyang 时间:2022-09-06 11:22:47 

本文实例讲述了Android解析Intent Filter的方法。分享给大家供大家参考。具体分析如下:

匿名性质的运行时绑定使得理解Android如何解析一个隐式Intent到一个特定的应用程序组件变得重要。
 
和你之前看到的一样,当使用startActivity时,隐式Intent解析到一个单一的Activity。如果存在多个Activity都有能力在特定的数据上执行给定的动作的话,Android会从这些中选择最好的进行启动。
 
决定哪个Activity来运行的过程称为Intent解析。Intent解析的目的是通过下面的过程找到可能匹配得最好的Intent Filter:
 
1. Android把安装的包中可获得的Intent Filter放到一个列表中。

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

①. 动作匹配指Intent Filter包含特定的动作或没有指定的动作。一个Intent Filter有一个或多个定义的动作,如果没有任何一个能与Intent指定的动作匹配的话,这个Intent Filter在算作是动作匹配检查失败。
 
②. 种类匹配更为严格。Intent Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配。

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

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

①. mimetype是正在匹配的数据的数据类型。当匹配数据类型时,你可以使用通配符来匹配子类型(例如,earthquakes/*)。如果Intent Filter指定一个数据类型,它必须与Intent匹配;没有指定数据的话全部匹配。
 
②. scheme是URI部分的协议——例如,http:,mailto:,tel:。
 
③. host-name或“data authority”是介于URI中scheme和path之间的部分(例如,www.google.com)。匹配主机名时,Intent Filter的scheme也必须通过匹配。
 
④. 数据path是紧接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情况下才匹配。

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

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

希望本文所述对大家的Android程序设计有所帮助。

标签:Android,Intent,Filter
0
投稿

猜你喜欢

  • Android Insets相关知识总结

    2023-04-24 09:08:23
  • Flutter Recovering Stream Errors小技巧

    2023-09-02 05:02:17
  • 一文带你初识java中的String类

    2022-05-20 10:36:53
  • Android设备间实现蓝牙(Bluetooth)共享上网

    2023-02-21 14:25:36
  • 浅谈Unity脚本生命周期与执行顺序

    2022-05-22 00:47:34
  • C#实现XML与实体类之间相互转换的方法(序列化与反序列化)

    2022-05-14 03:39:32
  • Java多线程模拟银行系统存钱问题详解

    2023-11-28 22:13:32
  • Android学习教程之圆形Menu菜单制作方法(1)

    2022-05-23 03:08:50
  • Android开发手册Chip监听及ChipGroup监听

    2023-03-13 01:16:36
  • C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案

    2021-10-03 01:54:19
  • java设计模式之工厂方法详解

    2023-09-09 01:18:56
  • springmvc+mybatis 做分页sql 语句实例代码

    2021-09-11 19:29:06
  • C#中缓存System.Web.Caching用法总结

    2021-09-05 04:41:11
  • SpringBoot整合WebSocket实现聊天室流程全解

    2021-07-03 23:35:21
  • 使用java打印心型、圆形图案的实现代码

    2021-08-30 19:50:45
  • C#/VB.NET 给Excel添加、删除数字签名的方法

    2022-03-21 08:29:07
  • Android 源码浅析RecyclerView ItemAnimator

    2022-04-20 19:47:41
  • Eclipse中安装反编译工具Fernflower的方法(Enhanced Class Decompiler)

    2021-09-12 09:01:13
  • C#读取系统字体颜色与大小的方法

    2021-12-29 07:54:57
  • Java使用Tess4J实现图像识别方式

    2022-10-07 19:24:11
  • asp之家 软件编程 m.aspxhome.com