2012-11-13 101 views
1

在我的应用程序中我有2 BroadcastReceivers。让我们打电话AReceiverBReceiverAReceiver只是在侦听android.intent.action.BOOT_COMPLETED,所以如果它在我的应用程序的设置中打开,它可以注册BReceiver以执行其他操作。检索已注册BroadcastReceiver的实例以取消注册

所以我有一个PreferenceActivity可以切换我的应用程序的状态,这意味着:

  • 状态:在
    • AReceiver寄存器BReceiver在启动
    • 想从OFF改变 - > On应寄存器BReceiver
  • S tatus:关
    • AReceiver将在启动
    • 从在更改注册BReceiver - >关闭应注销BReceiver

这是我遇到的问题。我如何注销BReceiver,如果它在AReceiverPreferenceActivity中注册,可能在此期间关闭?我不知道我必须传递给unregisterBroadcastReceiver()作为参数,因为它需要注册接收方的实例。

如何检索注册BroadcastReceiver的实例,以便我可以取消其注册?

回答

0

您应该能够将BReceiver放入清单中(默认禁用),然后在任何时候启用和禁用它。看一看here

+0

谢谢。我知道清单中接收器的“启用”状态,但我还是认为我仍然需要取消注册。你不应该假设:/实际上,使用这个我只需要在首选项改变时切换状态,因此呈现'AReceiver'没有用,因为我可以将'IntentFilter'放入清单中。 – taymless

0

您可以使BReceiver的激活始终通过AReceiver完成(即使在首选项中切换OFF-> ON时)。因此,AReceiver存储了BReceiver的实例并能够注销它。是否有意义 ?

+0

如果我理解你是对的,你的意思是我应该在'AReceiver'中存储'Breceiver'的实例。如果是这样,我不认为这会起作用,因为'BroadcastReceiver'实例的生命周期仅限于onReceive。因此,在启动时重新注册“BReceiver”的实例将不会与以后使用该设置的实例相同。 – taymless

+0

是的,你是完全正确的。然后去@ iLRedEiMAtTi的解决方案:) – fiddler