liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのBroadcastReceiver - 概要

BroadcastReceiverはプログラム(ユーザ開発、システム内部プログラム)が発信するBroadcast Intentを受信する。

BroadcastReceiverの本質はグローバル(システムレベル)リスナーである。

BoradcastReceiverの実装

  • BoradcastReceiverのonReceiver(Context context, Intent intent)をオーバライドする

BoradcastReceiver起動手順

  1. BroadcastReceiver起動用Intent生成する
  2. ContextのsendBroadcast() Or sendOrderedBroadcast()でBroadcastReceiverを起動する
    • sendBroadcast() : 同時にすべての受信者に送信する。
      • 欠点は、処理結果を次の受信者に送信できない、かつBroadcast Intentを終了できない
    • sendOrderedBroadcast() : 優先順を指定し、順次受信する(setPriority())
      • 利点は、処理結果を次の受信者に送信できるかつBroadcast Intentを終了できる(abortBroadcast())

※ SMS受信時のBroadcastは順位指定である。
なので、BroadcastReceiverの優先順位を高め、Broadcastを終了するとユーザのSMS受信を禁止することができる。

Broadcastイベント発生

  1. システムは対応するBroadcastReceiverを生成し、onReceiver()を起動する
  2. onReceiver()実行後、BroadcastReceiverを破棄する

※ onReceiver()は10秒以内に終了しないと、AndroidはANRダイアログを表示する。 時間がかかる処理は、IntentでServiceを起動し処理を完成させるのを検討する。