-1

这可能是一个非常愚蠢的问题,但我不太清楚答案。为什么我们需要android中的intent过滤器?

  1. 我的隐式意图包含一个动作,数据&类别(可选),我在发送或者通过startActivity或startService意图通过。

这样的事情,我们通常做的,

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); 
intent.putExtra(android.content.Intent.EXTRA_TEXT, "Standing on the Moon!"); 
startActivity(intent); 

,然后我们用不同的方式完成的,清单文件使用一个意图过滤器相同的操作类似

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

我的问题 - 既宣称这是为了相同的目的,他们宣布的两种不同方式的方式,他们是否有不同的意义?

+0

第一个是调用,第二个是宣告。这就像说你不需要方法签名,因为你调用了你的方法,所以他们必须存在。 – njzk2

+0

在启动您自己的应用程序的组件时请不要使用隐式Intents - 使用明确引用您的ShareActivity.class的Intent。不使用隐式意图的原因是您无法保证您的应用程序组件将被使用,并且您可能会看到意外的行为。 – Squonk

回答

4

我记得,从清单文件引用应用程序作为意图过滤器会让其他应用程序知道您有能力处理该意图。因此,如果您有能力发送邮件并在清单中以这种方式注册自己,另一个应用程序可以使用您的邮件发送电子邮件。

这是经常看到的画廊应用程序。应用程序很少创建自己的应用程序,除非它们本身是一个应用程序库因此,他们会询问Android系统可用的图库/邮件应用程序,并让您从列表中选择一个。当您将自己注册为可处理此意图的应用程序时,您可以在此列表中找到您的应用程序。

我确实认为这是两者之间的一个主要区别,因为程序化实例并不为其他应用程序所知。

+0

谢谢......我正在寻找答案。 – akash89