【发布时间】:2010-07-03 16:55:54
【问题描述】:
我已经阅读了很多关于意图过滤器的文章,但我真的无法准确理解它们的作用?
如果有人可以用一个清晰的例子向我解释一下意图过滤器的作用是什么?
谢谢
【问题讨论】:
-
我相信当一个人因为误解而无法弄清楚的时候是没有问题的
标签: android intentfilter
我已经阅读了很多关于意图过滤器的文章,但我真的无法准确理解它们的作用?
如果有人可以用一个清晰的例子向我解释一下意图过滤器的作用是什么?
谢谢
【问题讨论】:
标签: android intentfilter
我认为这是有据可查的here。总而言之,当(例如)您将意图传递给 Context.startActivity 或 Context.startService,或使用 Context.sendBroadcast 等进行广播时,该意图传递给什么活动或服务(或者,哪组广播接收器)?
答案:如果意图是“显式”的,即它设置了组件名称字段,那么它会被传递到它指定的目标组件——这通常发生在应用程序内的通信中。
否则(“隐式”意图,如应用程序之间的典型通信),Android 必须自行确定最佳活动或服务(或一组接收器)。 Android 是如何做到这一点的?这就是过滤器的用武之地,我引用:
它通过比较内容来做到这一点 意图对象的意图 过滤器,与相关的结构 可能潜在的组件 接收意图。过滤器宣传 组件的能力和 划定它可以处理的意图。 他们打开组件到 接受隐含的可能性 广告类型的意图。如果一个 组件没有任何意图 过滤器,它只能接收显式 意图。带有过滤器的组件可以 接收显式和隐式 意图。
有问题的网页继续包含许多细节,最后是一个完整、简单的示例,我认为在这里复制和粘贴它们是多余的。
【讨论】:
简单地说,Intent 过滤器是一种告诉操作系统如何启动/与应用中不同的活动/服务/广播接收器通信的方式。例如,如果您希望以http://www.mycompany.com 开头的链接引导人们进入您的应用程序,那么意图过滤器就是实现此目的的方法。设置完成后,只要有人单击以该链接开头的链接(在任何应用程序中),用户都会看到使用您的应用程序查看该页面的选项。您可能已经通过 youtube 网址看到了这一点。同样,如果您希望许多应用程序中常见的“共享”链接列出您的应用程序,则可以使用意图过滤器来做到这一点。
希望这会有所帮助...
【讨论】:
intent filter 让系统知道组件可以处理哪些数据或服务请求。组件可能是活动、服务或广播接收器。
如果您正在编写一个图像查看器,您可以在清单中添加一个(或多个)意图过滤器来描述您可以处理的图像。如果您正在编写文件浏览器,您可能会将图像文件的详细信息打包在一个意图中,系统将筛选意图过滤器,直到找到处理该图像的最佳匹配。对于可能从一个组件传递到下一个组件的任何类型的数据或服务也是如此。
【讨论】:
意图过滤器是一种告诉操作系统让我处理/提供此类活动/服务的方式
通过向 Manifest 添加给定的过滤器,告诉操作系统我也可以处理短信服务,并且每当您发送短信时,它都会显示在列表中,或者您也可以明确地将其用作短信服务。
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<action android:name="com.example.code.SMS_INTENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="smsto" />
</intent-filter>
并且要显式使用此服务,请像...一样调用它
Intent intent = new Intent("com.example.code.SMS_INTENT", Uri.parse(uri));
intent.putExtra("from", "code");
startActivity(intent);
【讨论】:
IntentFilters 用于声明声明组件将响应的 Intent 属性模式。您可以使用 IntentFilter 指定给定的 Activity、Service 或 BroadcastReceiver 将响应操作、数据 mime 类型、方案、路径等的组合。例如,如果您使用 IntentFilter 为数据类型为“text/plain”的 ACTION_SEND 注册 Activity ",每次用户想要发送一些文本时都会调用您的 Activity。
【讨论】:
intentFilters 通告组件的功能并定界 可以处理的意图。给定 Activity 的 IntentFilter, Service 或 BroadcastReceiver 将响应组合动作, 数据 mime 类型、方案、路径等。
通过将意图与基于三个的意图过滤器进行比较的意图 方面:
1:- 意图操作
2:- 意图数据(URI 和数据类型)
3:- 意图 类别action :
以名称声明接受的意图操作 属性。该值必须是操作的文字字符串值, 不是类常量。数据:
使用一个或多个声明接受的数据类型 指定数据 URI 各个方面的属性(方案、主机、 端口、路径等)和 MIME 类型。category :
在名称中声明接受的意图类别 属性。该值必须是操作的文字字符串值, 不是类常量。
例如,此活动处理带有文本数据的“发送”操作。
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
【讨论】:
intent-filter来处理来自应用程序外部的请求?
intent-filter?
Intent 过滤器告诉 android 系统 android 组件(活动、服务、广播接收器)应该监听哪个 Intent 或事件。
【讨论】: