浅谈从Activity到intent-filter(意图过滤器 )的属性分析

Activity通常展现为一个可视化的用户界面,可把它当做就是一个单独的屏幕,可视化内容区域是一些具有层次关系(类似数据结构的树)的视图(均由View类的子类表示),每个视图控制窗口中的一个矩形区域,父视图包含一些子视图并管理子视图的布局,内容视图是视图层次结构中的根节点视图直接响应用户的动作,因此视图(ps:按我目前的理解视图相当于是一些控件,es:按钮,文本域,滚动条,菜单,复选框等)是Activity与用户交互的接口,通过调用Activity.setContentView()方法来设置展现activity的窗口的视图(必须执行的初始化操作)。例如,一个显示图片的视图,当用户单击这个视图时它可能会启动一个动作,这个动作可能会是启动一个新的activity,实现从一个activity转到另一个activity上。

Activity之间通过intent实现通信,intent-filter就是用来注册Activity,Service和Broadcast Receiver 使Android知道那个应用程序(或组件)能用来响应intent请求使其可以在一片数据上执行那个动作。为了注册一个应用程序组件为intent处理者,在其组件的manifest节点中添加一个intent-fillter标签。

使用intent-filter标签,例如:

在AndroidManifest文件中含有如下过滤器的Activity组件为默认启动类当程序启动时系统自动调用它

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

第一个action动作中的.MAIN为设置程序的主入口,category语句表示在程序的启动列表中出现该图标的activity,缺少此category在程序启动列表中就找不到该应用的图标,整个intent-filter的作用是用于把应用图标宣示到程序显示列表中。      下面我们就来进一步的解析intent-filter标签的使用:

<intent-filter android:label="@string/Asen's blog">

<action android:name="android.intent.action.MAIN" />

<action android:name="android.intent.action.VIEW" />

<action android:name="android.intent.action.EDIT" />

<category android:name="android.intent.category.DEFAULT" />

<category android:name="android.intent.category.LAUNCHER" />

<category android:name="android.intent.category.ALTERNATIVE" />

<data android:mimeType="video/mpeg" android:scheme="http".../>

<data android:mimeType="audio/mpeg" android:content="com.example.project:200/folder/subfolder/etc"/>

</intent-filter>

 

 

1.动作测试(action)

一个intent对象只能指定一个action,而一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配;

一个intent对象的action必须和intent-filter中的某一个actiong匹配,才能通过;

如果intent对象不指定action且intent-filter的action列表不为空,则通过;

2.类别测试(category)

简单的说就是种类匹配Intent-Filter必须包含所有在解析的Intent中定义的种类。一个没有特定种类的Intent Filter只能与没有种类的Intent匹配,对于 IntentFilter中多余的<category>声明并不会导致匹配失败。有一个重要的点就是如果intent 是implicit intent(隐式意图),android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败,换句话说就是必须加上这个category。

3:数据测试(data)

data有两部分构成,一个是数据类型,另一个是URI。每个URI包括四个属性参数(scheme,host, port, path),形如:scheme://host:port/path, 其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。 Intent filter和Intent相互配合,实现了Android系统四大组件之间的信使功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值