Android:了解Intent-Filters

Pas*_*ein 33 android intentfilter android-intent

我想创建一个意向过滤器,从而使某些环节会触发我的应用程序的开始(见本计算器线程,例如:如何注册一些URL命名空间(MYAPP://app.start/)来访问你的程序通过在Android OS中的浏览器中调用URL?)

尝试时,我想,我不太明白Intents和Intent-Filters(在Manifest.xml中定义)实际上是如何工作的.以下是有什么区别的:

<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
Run Code Online (Sandbox Code Playgroud)

或以下:

<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.MAIN" />
Run Code Online (Sandbox Code Playgroud)

实际上,类别和动作Intent-Filters之间的区别是什么.我阅读了这个页面http://developer.android.com/reference/android/content/Intent.html但我仍然缺少一个基本的了解.

Bri*_*ley 89

而不是从应用程序的角度来看它,翻转它并从Intent侧看它.

创建Intent时,创建者不知道系统上有哪些应用程序来处理Intent.但是创建者确实知道它想要做什么(例如,应用程序可能希望让用户从设备上的某个地方挑选出联系人),并且需要联系系统上的其他应用程序以询问所需的内容.

为此,Intents会附加几条信息.其中包括行动和类别.

动作以一般方式定义Intent想要执行的操作,例如查看联系人,从图库中选取图像等.

该类别是另一条信息,它为Intent提供了另一种区分自身的方式.例如,单击浏览器中的链接时,创建的Intent会附加BROWSABLE类别.

因此,当操作系统解析Intent时,它将查找具有包含所有信息的intent过滤器的已注册活动或BroadcastReceiver .如果Intent指定了PICK操作,那么没有具有PICK操作的intent-filter的Activities将从候选列表中被丢弃以处理Intent.

通过这种方式,与Intent关联的组合动作,类别,类型和(可能)方案用于精确定位可以处理Intent的活动集.在清单中设置intent-filter时,您告诉操作系统您可以处理哪类意图.