android组件通讯 Intent Filter隐式实现Intent
2011-01-20 00:14
337 查看
Intent Filter是android里非常有特色的一个概念。他的用户体验和windows下的文件管理器的弹出菜单里的“打开方式”非常相似。在windows中,当用户选择了打开方式菜单后,系统让用户选择应用来打开所选择的文件。而在android中的文件已经被uri资源代替了。
Intent Filter在android中的应用非常普遍,尤其在资源共享中。例如,当用户选择了一个图片,选择了共享,我们常常会发现一个选择列表。这个选择列表是动态生成的,不是一成不变的。假如你新安装了facebook应用,那么facebook就会出现在这个列表里面。从这个例子可以发现,intent filter的设计使得android系统显得更加灵活了。
要实现一个Intent Filter, 我们要在AndroidManifest.xml中加入必要的设置,以通知系统某个activity都能够处理什么类型的URI资源,然后要在activity的onCreate中加入必要的代码以处理系统传递过来rui资源。
一个Service、 Activity 或者 Brodcast Reciever 的Intent Filter , 的事件过滤器, 我们用着大家都很了然的说法来描述之吧, 实际上描述了拥有这些过滤器组建在系统中所具有能力。
Filter 的创建都是通过 manifest.xml 文件, 但是对于 Broadcast Reciever 用
对于 <data> 过滤条件稍微复杂点, 但是总的原则还是, 只有Intent 能够通过 Filter, 那么Intent 中的信息,必须出现在Filter中。 <data> 需要指定
这里翻译文档中的四个例子情况:
a.如果没有定义URI 和数据类型, 则,该Intent只能通过没有定义URI和 数据类型的 过滤器。
b.只定义了URI的 Intent 只能通过只定义了 URI 的过滤器。
c.只定义了 数据类型的 Intent 也只能通过只定义了 数据类型的过滤器。
d. 如果一个Intent同事定义了URI和 数据类型, 或者数据类型可以由URI推定, 则只有具备了对应的数据类型,或者 content: 或者 file: 类型,并且没有定义URI的过滤器。(这种情况, 你自己代码一下就明白了, 在写下去,我也不鸟鸟了。)
如果通向Activities 的Intent 引起了多个响应, 就会出现需要用户指定的提示, 或者是异常。
差不多就是这样的情况了, android 的这种机制非常适合移动设备之间的应用相互调用, 以便在更大的粒度上达成复用。很强大。
/Chapter06_Intent_Filter/src/com/amaker/ch06/app/MainActivity.java
代码
Intent Filter在android中的应用非常普遍,尤其在资源共享中。例如,当用户选择了一个图片,选择了共享,我们常常会发现一个选择列表。这个选择列表是动态生成的,不是一成不变的。假如你新安装了facebook应用,那么facebook就会出现在这个列表里面。从这个例子可以发现,intent filter的设计使得android系统显得更加灵活了。
要实现一个Intent Filter, 我们要在AndroidManifest.xml中加入必要的设置,以通知系统某个activity都能够处理什么类型的URI资源,然后要在activity的onCreate中加入必要的代码以处理系统传递过来rui资源。
一个Service、 Activity 或者 Brodcast Reciever 的Intent Filter , 的事件过滤器, 我们用着大家都很了然的说法来描述之吧, 实际上描述了拥有这些过滤器组建在系统中所具有能力。
Filter 的创建都是通过 manifest.xml 文件, 但是对于 Broadcast Reciever 用
Context.registerReceiver() 来创建。Filter 可以包含三种类型的过滤条件 <action> <category> <data>
一个Intent 是否能够通过一个过滤器到达对应的处理器取决于, Intent 所包含的 所有Categroy 是够都在 过滤器中的catergory 列表里出现。 换句话说, 没有 catergory字段的Inteng 可以通过任何过滤器, 而一个过滤器, 必须至少要有一个可以通过的限定,Category 或者 Action。 对于Action 也一样, 能够通过Filter 的Itent的 Action
必须被列与 Category中。同样, 没有Action 的
Intent 也可以通过所有的Filter。
对于 <data> 过滤条件稍微复杂点, 但是总的原则还是, 只有Intent 能够通过 Filter, 那么Intent 中的信息,必须出现在Filter中。 <data> 需要指定
scheme://host:port/path , 条件顺序的优先级随着范围缩小而降低,相当于,看作目录,在子目录下匹配。比如, Filter指定了 scheme, 那么所有具有这个 scheme 的 Intent 都能通过,这个Filter, 类似的通配符的情况也是允许的。
这里翻译文档中的四个例子情况:
a.如果没有定义URI 和数据类型, 则,该Intent只能通过没有定义URI和 数据类型的 过滤器。
b.只定义了URI的 Intent 只能通过只定义了 URI 的过滤器。
c.只定义了 数据类型的 Intent 也只能通过只定义了 数据类型的过滤器。
d. 如果一个Intent同事定义了URI和 数据类型, 或者数据类型可以由URI推定, 则只有具备了对应的数据类型,或者 content: 或者 file: 类型,并且没有定义URI的过滤器。(这种情况, 你自己代码一下就明白了, 在写下去,我也不鸟鸟了。)
如果通向Activities 的Intent 引起了多个响应, 就会出现需要用户指定的提示, 或者是异常。
差不多就是这样的情况了, android 的这种机制非常适合移动设备之间的应用相互调用, 以便在更大的粒度上达成复用。很强大。
/Chapter06_Intent_Filter/src/com/amaker/ch06/app/MainActivity.java
代码
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.ch06.app" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="TestActivity" > <intent-filter> <action android:name="com.amaker.ch06.app.TEST_ACTION1"/> <action android:name="com.amaker.ch06.app.TEST_ACTION2"/> <action android:name="com.amaker.ch06.app.TEST_ACTION3"/> <action android:name="android.intent.action.VIEW"/> <data android:scheme="content" android:path="com.amaker.ch07.app/abc"/> <data android:scheme="http" android:path="www.google.com" /> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="com.amaker.ch07.app.CATEGORY1"/> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3" /> </manifest>
相关文章推荐
- android组件通讯 Intent Filter隐式实现Intent
- React Native Android 组件IntentAndroid 实现拨打电话
- Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)
- Android应用程序组件间通信(二)——IntentFilter类简介
- Android使用Intent隐式实现页面跳转
- 显式与隐式Intent及AndroidManifest.xml文件中intent-filter参数说明
- Android应用程序组件间通信(二)——IntentFilter类简介
- Android显式意图、隐式意图、意图过滤器(intent-filter)、意图间传值
- android组件通讯 Intent- 系统标准的Activity Action应用
- Android之隐式意图(Intent)如何查找匹配的组件
- Android之隐式意图(Intent)如何查找匹配的组件
- Android开发笔记(四十)组件通讯工具Intent
- android基础之IntentFilter匹配规则与隐式启动Activity
- Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)
- Android组件的通讯——Intent
- android组件通讯 Intent- 系统标准的Activity Action应用
- 隐式启动Activity,Intent filter必须添加android.intent.category.DEFAULT
- android组件通讯 Intent-ComponnentName属性
- Android之隐式意图(Intent)如何查找匹配的组件
- Android中隐式Intent以及Intent-filter详解 和匹配规则