2012-02-17 83 views
2

BroadcastReceiver是否有可能在已經接收廣播的背景中進行了活動?如果不是,我該怎麼辦?後臺活動中的BroadcastReceiver是否可能接收廣播?

編輯:

讓我澄清一下我真正需要的。 我有服務,將從藍牙接收數據。 當它從藍牙設備成功獲取數據時,服務將播放

並且有三種情況的活動

  1. 前景

彈出一個對話框,詢問用戶的東西 我認爲它可以通過寄存器接收器在活動做簡單

  1. 背景

我只是不知道怎麼做這部分。 如果我在應用程序中註冊接收器,會顯示通知。看了下面的答案後,我想我可以在Application中註冊。

  1. 睡眠 喚醒設備。

謝謝。

回答

5

你可能不想要那個。活動的目的不是爲了這樣使用。

您應該使用服務來處理它。或者如果需要創建一個UI,則啓動一個Activity。

我看到它的方式有兩種選擇。

  1. 有一個服務運行並註冊接收器。
  2. 如果可能,您可以在清單中註冊廣播接收器,然後在那裏處理它。 請注意,接收器將在主線程中運行,因此您應該發信號給正在運行的服務或在此處啓動服務或活動。也許是執行單個任務的服務。

執行單個任務的服務可以使用IntentService輕鬆實現。這有點像一個服務中包裝的異步任務。

+0

作爲第二點的補充,我想補充一點,該服務也將在主線程上運行,除非您在那裏處理線程或免費使用IntentService – 2012-02-17 17:42:56

3

是否有可能BroadcastReceiver在一個活動中去了後臺接收廣播?如果不是,我該怎麼辦?

在您致電registerReceiver之後或致電unregisterReceiver之前,您可能會隨時收到通知。如果您在「後臺」中收到廣播,這可能意味着您沒有將註冊和註銷呼叫綁定到活動生命週期中的相應方法。

3

如果您使用activit的上下文註冊廣播接收器,只要活動處於活動狀態,它就會收到廣播。但是,您可以使用applicatino上下文註冊接收器,即使活動不活動,它仍會接收廣播。

+1

但是這會使應用程序混亂,該活動或一些單獨的處理程序。 活動必須活着的事實也是一個很大的'如果'。 – 2012-02-17 17:41:03