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