什么是意图filter准确?

我读了很多关于意图filter的文章,我真的不明白他们在做什么?

所以如果有人可以用一个明确的例子向我解释什么是意图filter的作用?

谢谢

Solutions Collecting From Web of "什么是意图filter准确?"

我认为这里有很好的文档。 总结一下,当(例如)你将意图传递给Context.startActivity或Context.startService,或者通过Context.sendBroadcast等广播时,意图传递给哪个活动或服务(或者哪个广播接收者集合)?

答案:如果意图是“明确的”,即它具有组件名称字段集合,那么它被传递到它指定的目标组件 – 这通常发生在应用程序内的通信中。

否则(“隐式”意图,就像应用程序之间的通信一样),Android必须自行确定最佳活动或服务(或接收器集合)。 Android如何做到这一点? 这是filter进来,我引述:

它通过将Intent对象的内容与意图filter进行比较,将与可能接收意图的组件相关联的结构进行比较。 filter通告组件的function并划定它可以处理的意图。 他们打开组件,以接收广告types的隐含意图的可能性。 如果一个组件没有任何意图filter,它只能接收明确的意图。 具有filter的组件可以接收显式和隐式意图。

有问题的网页继续有很多细节,最后是一个完整的简单例子,我认为在这里复制和粘贴它们是多余的。

简而言之,意图filter是告诉操作系统如何启动/与您的应用程序中的不同活动/服务/广播接收器进行通信的一种方式。 因此,例如,如果您希望以http://www.mycompany.com开头的链接将用户引导至您的应用,则可以使用意向filter来实现此目的。 一旦设置完毕,任何时候当有人点击一个以此为开头的链接(在任何应用程序中)时,用户将看到使用您的应用程序查看该页面的选项。 你可能已经看过这个youtubeurl。 同样,如果您想要在许多应用程序中常见的“共享”链接列出您的应用程序,将使用意向filter来做到这一点。

希望这可以帮助…

意图filter让系统知道组件可以处理的数据或服务请求。 一个组件可能是一个活动,服务或广播接收器。

如果您正在编写图像查看器,则可以向描述可以处理的图像的清单添加一个或多个意图filter。 如果你正在编写一个文件浏览器,你可能会打包一个意图的图像文件的细节,系统会筛选意向filter,直到find最佳匹配来处理该图像。 对于可能从一个组件传递到下一个组件的任何types的数据或服务也是如此。

intentFilters宣传一个组件的function,并划定可处理的意图。 一个IntentFilter,一个给定的Activity,Service或BroadcastReceiver将响应动作,数据MIMEtypes,scheme,path等的组合。

意图通过比较意向filter和意向filter三个方面:

1: – 意图行动
2: – 意图数据(包括URI和数据types)
3: – 意图类别

行动:
在name属性中声明接受的意图操作。 该值必须是操作的文字string值,而不是类常量。

资料:
使用指定数据URI(scheme,主机,端口,path等)和MIMEtypes的各个方面的一个或多个属性声明接受的数据types。

类别:
在name属性中声明接受的意图类别。 该值必须是操作的文字string值,而不是类常量。

例如,此活动处理带有文本数据的“发送”操作。

<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter> 

意图filter是一种告诉操作系统,让我处理/提供这些types的活动/服务的方式

通过给Manifest添加给定的filter告诉操作系统,我也可以处理短信服务,每当你发送短信,它会显示在列表中,或者你也可以明确地使用这个作为你的短信服务。

 <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将响应操作,数据MIMEtypes,scheme,path等的组合。例如,如果您针对数据types为“text / plain”的ACTION_SEND注册了带IntentFilter的Activity “,每当用户想要发送一些文本时,你的活动就会被调用。

意图filter告诉android系统的android组件(活动,服务,广播接收器)应该听的意图或事件。

Android清单文件中的意图filter部分告诉Android运行时,该活动应该被注册为应用程序中的一个可能的入口点,并在Android系统的启动器中可用。