有谁能告诉我活动中的intent-filter和broadcastreceiver的区别吗?非常感谢!
<activity>
<intent-filter></intent-filter>
</activity>
和
<receiver>
<intent-filter></intent-filter>
</receiver>
我注册一个BroadcastReceiver来监听短信到达的事件。现在,我想在活动中使用intent-filter。我能做到吗?
对于<activity>
,当然可以有一个<intent-filter>
。有些可以,比如你的启动器活动。
但是,如果您尝试在<receiver>
上使用与<activity>
相同的<intent-filter>
来"监听SMS到达的事件",那将不起作用。它不能工作的原因与<intent-filter>
无关,而是与Intent
有关。
Intent
用于以下三种情况之一:
- 启动活动
- 启动或绑定服务
- 发送广播
它们是完全独立的。你可以把它们想象成电视上三个独立的频道,或者三条独立的火车轨道。
当SMS到达时,系统将发送一个(或多个)与该事件相关的广播。因为它们是广播,你可以用<receiver>
收听它们。由于它们是广播,您不能使用<activity>
或<service>
来收听它们。
欢迎<receiver>
调用startActivity()
来启动一个活动,这几乎就像<activity>
直接响应广播一样。然而,虽然这在技术上是可行的,但它很少是正确的答案,因为用户通常不喜欢在他们正在做的事情中被没有警告的弹出活动打断。
当一个应用程序使用一个intent启动一个activity时,它只启动一个activity(可能会显示"Complete action using…"对话框,让你选择用哪个app打开它),服务也是如此,但是广播一个intent可能会启动几个广播接收器,可能来自不同的应用程序。