Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该接收Intent的组件进行和筛选的机制,Intent过滤器还可以匹配数据类型、路径和协议,还包括可以用来确定多个匹配项优先级(Prprity),应用程序的Activity组件、Service组件和BroadcaseReceiver都可以注册Intent过滤器,这样,这些组件在特定的数据格式上则可以产生相应的动作。

注册过滤在AndroidManifest.xml文件中定义

 

Intent节点属性

1.<action>:  android:name--->指定组件所能响应的动作,用字符串表示,通常使用JAVA类名和名的完全限定名构成

2.<category>: android:category -->指定以何种方式去服务Intent请求的动作<一个程序中可以有多个Category标签哦>

3.<data>

3.1Android:host --> 指定一个有效的主机名

3.2android:mimetype --> 指定组件能处理的数据类型

3.3 android:path --> 有效的URI路径名

3.4android:port -->主机的有效端口号

3.5android:schme--> 所需要的特定的协议

 

 

 

 

 

Android系统提供的类别(Category

ALTERNATIVE:Inent数据默认动作的一个可替换的执行方法

DRLRVYRF_ALTERNATIVE:和ALTERNATIVE类似,但替换的执行方法还是指定的, 而是被解析出来的

BROWSABLE:声明Activity可以由浏览器启动

DEFAULT:Intent过滤器中定义的数据提供默认动作

HOME:设备启动后显示的第一个Activity

LAUNCHER:在应用程序启动时首先被显示

 

 

AndroidManifest.xml文件中的每个组件的<intent-filter>都被解析成一个Intent过滤器对象,当应用程序安装到Android系统时,所有的组件和Intent过滤器都会注册到Android系统中,这样,Android系统便乱箭了如何将任意一个Intent请求通过Intent过滤器映射到相应的组件上。

IntentIntent过滤器的映射过程称为:“Intent解析”,Intent解析的匹配规则如下:

1.Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表。

2.在进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配  Intent过滤器都将被过滤掉,没有指定动作的Intent过滤器可以匹配任何的Intent,但是没有指定"类别"的过滤器只能匹配没有“类别”的Intent….吼吼。 。。

3.Intent数据的Uri的每个子部与Intent过滤器的<data>标签中的属性

进行匹配,如果<data>标签指定了协议、主机名、路径名或或MIME的类型,那么这些属性都要与IntentUri数据部分进行匹配,任何不匹配的Intent过滤器都会被过滤掉。

4.如果Intent过滤器多于一个,则可以根据在<inter-filter>标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择。

 

 

 

Intent的另一种用途是改善广播消息。应用程序与Android系统都可以用Intent改善广播消息,如果应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息。

 

String UNIQUE_STRING="com.mzh.www.BroadcastReceiverDemo"

Intent intent = new Intent(UNIQUE_STRING);

intent.putExtra("key1","XXX");

intent.putExtra("key2","YYY");

sentBroadCast(intent);

在构造Intent对象时必须用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称,如:UNIQUE_STRING

 

 

BroadcastReceiver用于监听广播消息,可以在全局文件或代码中注册,如:

public class MyBroadcastReceiver extends BroadcastReceiver{

@Override

//此方法必须重写

public void onReceiver(Context context, Intent intent ){

 

此处省略一万字,,,吼吼。。

}

}

此处:onReceiver()方法必须要在5秒钟执行完毕,否则Android系统会认为该组件失去响应,并提示用户执行强制关闭的

 

 

xml文件中注册广播接收器:

through the <receiver> tag in your AndroidManifest.xml.

 

<receiver android:name=".继承BroadcastReceiver的类名">

<intent-filter>

<action android:name="此处为sentBroadCast(intent)的值一标识">

</intent-filter>

</receiver>