AndroidのBroadcastReceiver - 概要
BroadcastReceiverはプログラム(ユーザ開発、システム内部プログラム)が発信するBroadcast Intentを受信する。
BroadcastReceiverの本質はグローバル(システムレベル)リスナーである。
BoradcastReceiverの実装
- BoradcastReceiverのonReceiver(Context context, Intent intent)をオーバライドする
BoradcastReceiver起動手順
- BroadcastReceiver起動用Intent生成する
- ContextのsendBroadcast() Or sendOrderedBroadcast()でBroadcastReceiverを起動する
- sendBroadcast() : 同時にすべての受信者に送信する。
- 欠点は、処理結果を次の受信者に送信できない、かつBroadcast Intentを終了できない
- sendOrderedBroadcast() : 優先順を指定し、順次受信する(setPriority())
- 利点は、処理結果を次の受信者に送信できるかつBroadcast Intentを終了できる(abortBroadcast())
- sendBroadcast() : 同時にすべての受信者に送信する。
※ SMS受信時のBroadcastは順位指定である。
なので、BroadcastReceiverの優先順位を高め、Broadcastを終了するとユーザのSMS受信を禁止することができる。
Broadcastイベント発生
- システムは対応するBroadcastReceiverを生成し、onReceiver()を起動する
- onReceiver()実行後、BroadcastReceiverを破棄する
※ onReceiver()は10秒以内に終了しないと、AndroidはANRダイアログを表示する。 時間がかかる処理は、IntentでServiceを起動し処理を完成させるのを検討する。