【Kotlin/Android】BroadcastReceiverの使い方!登録と解放、発火方法

この記事からわかること
- Android Studio/KotlinでBroadcastReceiverの実装方法
- 静的な登録と動的な登録の違い
- registerReceiverやunregisterReceiver、sendBroadcastメソッドの使い方
- IntentFilterの役割
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
BroadcastReceiverとは?
AndroidのBroadcastReceiver
はブロードキャストインテントを受信して処理を実行する基本クラスです。これを使用することでイベントやシステム通知などを受信し、特定の処理やアクティビティやサービスの起動、異なるアプリ間のイベント送受信などを行うことができます。
BroadcastReceiver
を継承したReceiverクラスを作成して、活用しオーバーロードしたonReceive
メソッド内でブロードキャストを受信した際に実行される処理を記述します。
プロジェクト内で使用するためにはBroadcastReceiverを登録する必要があります。これは静的な登録と動的な登録のどちらかを行う必要があります。
- 静的な登録方法:AndroidManifest.xmlに追加する
- 動的な登録方法:Context.registerReceiverを使用する
静的な登録方法:AndroidManifest.xmlに追加する
静的な登録はアプリがインストールされるときにブロードキャストレシーバーが登録され、アプリが実行されていなくてもブロードキャストを受信できます。必要のない場合でも強制的に登録されるので導入する際は無駄なリソースを消費しないように注意する必要があります。
静的に登録する方法は「AndroidManifest.xml(マニフェストファイル)」にブロードキャストを受け取るクラスを以下のように宣言します。これでブロードキャストを受信できるようになります。
動的な登録方法:Context.registerReceiverを使用する
動的な登録はアプリが実行中にブロードキャストレシーバーが登録し、アプリが終了した場合はブロードキャストが失われる可能性があります。こちらは必要な時に登録し、不要になったら削除することができるので柔軟にブロードキャスト機能を使用することができ、セキュリティ的にも安全になります。
動的に登録する方法はContext.registerReceiver
メソッドを使用します。引数には対象のReceiverクラスとIntentFilter
を渡します。
IntentFilter
の役割はブロードキャストされてくるIntentのフィルタリングです。つまりIntentFilter
によって指定された条件に一致するブロードキャストのみがレシーバーによって処理されます。
レシーバーを解放する
不要になったレシーバーはunregisterReceiver
メソッドを使用して解放します。onDestroy
などのライフサイクルに混ぜておくと解放し忘れを防ぐことができます。
ブロードキャストを発火して受信する
実際にブロードキャストを発火するにはsendBroadcast
メソッドを使用します。引数にはIntent
を渡します。
おすすめ記事:【Kotlin/Android Studio】Intentとは?Activity間のデータの受け渡し
これで指定したアクション名を受信するレシーバークラスに通知が届き処理が実行されます。
全体のコード
端末の電源ON/OFFを検知する方法
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。