secroidに「レシーバを登録しています」って項目があるので、何のことやねんってならないための解説です。何となくわかる(かもしれない)シリーズ第二弾。
開発者向けの話ではないので、ざっくり説明します。まあ雰囲気をつかんでいただければ。何か質問とかあったらコメントしてください。
レシーバーってなに?
フルネームは「BroadcastReceiver(ブロードキャストレシーバー)」です。つまり、「どこかからブロードキャストされた何か」を受信するのがレシーバーです。broadcastとreceiveの意味を見れば、まあそのまんまだなと思いますよね。
何を受け取るの?
例えば、こんなものがあります。
- スクリーンがオンになった
- 端末の起動が完了した
- バッテリー残量が変化した
- バッテリー残量が少なくなった
- アプリがインストールされた
- アプリが更新された
- アプリがアンインストールされた
誰が送信してるの?
前項の例では、Androidシステム側がばしばし飛ばしてくれます。
つまり、システムがばんばんブロードキャストを飛ばしてるから、情報が欲しいアプリは各々でレシーバーを登録することで、いろんな状況の変化を簡単に検知できるってわけです。
ちなみに、独自にブロードキャストを送信したり、それを受信することもできます。
静的な登録と動的な登録
ブロードキャストには、AndroidManifest.xml(アプリのバージョン、要求パーミッション、使うアクティビティなどの情報をまとめたファイル)に書き込むだけで受信できるタイプと、サービスやアクティビティから登録する必要があるタイプがあります。
前者の代表的な例は「BOOT_COMPLETED」ですね。端末の起動完了を検知する場合は、AndroidManifest.xmlに書き込むだけでオッケーです。後者は色々ありますが、スクリーンオンの検知とかが当てはまります。
ユーザー視点からの二つの差ですが、後者の場合は通常「サービスを常駐させて受信する」必要があります。電話の誤発信防止アプリやTaskerなどのアプリが常駐するのは、こういったブロードキャストを受信するためです。(もちろん、サービス常駐の目的はブロードキャストだけではありません。あくまで一例です。)
0 件のコメント:
コメントを投稿