Intent过滤器学习

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

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>

 

 

 

 

 

 

 

     本文转自华华世界 51CTO博客,原文链接:

http://blog.51cto.com/mzh3344258/733362

,如需转载请自行联系原作者

相关文章
|
6月前
|
Android开发
android基础:Intents 和 intent-filter 的匹配规则
这篇文章详细解释了Android开发中Intent和<intent-filter>的匹配规则,包括Action、Category和Data的解析规则以及如何通过这些规则匹配隐式Intent。
179 1
|
9月前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
67 0
|
XML 存储 前端开发
Android:Intent 和 Intent 过滤器
在前 4 篇文章中,我们介绍了 Android 四大组件的基础知识,四大组件是构成我们 App 的基础,也是 Android 系统设计的最佳体现。各个组件之间完全是解耦的,如果想访问其他组件或者启动其他组件可以使用 Intent 来操作。在四种组件类型中,有三种(Activity、Service 和 Broadcast)均可以通过异步消息 Intent 进行启动。Intent 会在运行时对各个组件进行互相绑定。所以我们可以把 Intent 当作是各个组件之间的信使(无论该组件是自己 App 的还是其他 App)。
158 0
Android:Intent 和 Intent 过滤器
|
Java
intent类的不同页面跳转
layout文件 很简单,给Button设置一个点击事件就可以了。
80 0
|
Android开发
显式Intent和隐式Intent解析
Android中的Intent分为两种类型: * `显式 Intent`:按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity 以响应用户操作,或者启动服务以在后台下载文件。 * `隐式 Intent` :不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。 例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。
|
XML Java Android开发
Intent的用法(1)
Intent的中文意思是目的,主要是用来在不同的Activity中跳转
Intent的用法(1)
|
XML Java Android开发
|
Android开发
显示Intent和隐式Intent以及IntentFilter匹配规则
显示Intent 我相信显示Intent大家已经使用的非常熟练了,此处不再过多阐述。
232 0