您的位置:首页 > 职场人生

Intent过滤器学习

2011-12-04 19:40 85 查看
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.1:Android:host --> 指定一个有效的主机名
3.2:android:mimetype --> 指定组件能处理的数据类型
3.3: android:path --> 有效的URI路径名
3.4:android:port -->主机的有效端口号
3.5:android: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过滤器映射到相应的组件上。
Intent到Intent过滤器的映射过程称为:“Intent解析”,Intent解析的匹配规则如下:
1.Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表。
2.在进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配 的Intent过滤器都将被过滤掉,没有指定动作的Intent过滤器可以匹配任何的Intent,但是没有指定"类别"的过滤器只能匹配没有“类别”的Intent….吼吼。 。。

3.把Intent数据的Uri的每个子部与Intent过滤器的<data>标签中的属性
进行匹配,如果<data>标签指定了协议、主机名、路径名或或MIME的类型,那么这些属性都要与Intent的Uri数据部分进行匹配,任何不匹配的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 过滤器 休闲