2012-02-17 9 views
2

ブロードキャストを受信したバックグラウンドになったアクティビティのBroadcastReceiverは可能でしょうか?そうでない場合、私は何をすべきですか?バックグラウンドアクティビティのBroadcastReceiverがブロードキャストを受信する可能性はありますか?

EDIT:

私が本当に必要なものを明確にしましょう。 私はのサービスをBluetoothのからデータを受信します。 青い歯のデバイスから正常にデータを取得すると、サービスはをブロードキャストします。

アクティビティの3つのケースがあります。

  1. フォアグラウンド

ポップアップダイアログと私はそれが単に活動にレジスタ受信機によって行うことができると思い ユーザーに何かを頼む

  1. 背景

Iただこの部分を行う方法を知らない。 受信機をアプリケーションに登録すると、通知が表示されます。以下の回答を見てから、私はApplicationに登録できると思う。

  1. 睡眠 ウェイクアップ装置。

ありがとうございます。

答えて

5

あなたはおそらくそれを望んでいません。アクティビティはそのように使用するようには設計されていません。

サービスを使用して処理する必要があります。 UIが必要な場合は、アクティビティを開始してください。

2つの選択肢があります。

  1. サービスを実行して、代わりに受信機を登録してください。
  2. 可能であれば、代わりにマニフェストにブロードキャストレシーバを登録し、そこで処理することができます。 レシーバはメインスレッド上で動作するため、実行中のサービスに信号を送るか、ここでサービスまたはアクティビティを開始する必要があります。おそらく、単一のタスクを実行するサービス。

単一のタスクを実行するサービスは、IntentServiceを使用して簡単に実装できます。これは、サービスにラップされた非同期タスクのようなものです。

+0

2つ目の追加点として、サービスがスレッドを処理したり、IntentServiceで無料で入手したりしない限り、サービスはメインスレッドでも実行されることを追加したいと思います。 –

3

BroadcastReceiverがバックグラウンドを受信したアクティビティでブロードキャストを受信する可能性はありますか?そうでない場合、私は何をすべきですか?

あなたがいつでもあなたがregisterReceiverを呼び出して、あなたがunregisterReceiverを呼び出す前に、とき後に通知を受け取ることも可能です。 「バックグラウンド」にいるときにブロードキャストを受信すると、おそらく、登録を結びつけずに、アクティビティのライフサイクル内の適切なメソッドへの呼び出しを登録解除することを意味します。

3

アクティビティのコンテキストでブロードキャストレシーバを登録すると、アクティビティが有効である限りブロードキャストを受信します。

ただし、受信者をアプリケーションのコンテキストに登録することはできますが、アクティビティが有効でなくてもブロードキャストを受信します。

+1

これはプライベートにする必要がある問題アクティビティまたは別のハンドラ アクティビティが生きていなければならないという事実は、 'あれば'大きなものです。 –

関連する問題