2012年11月1日木曜日

Androidユーザー向け 「何となくわかるレシーバー講座」

secroidに「レシーバを登録しています」って項目があるので、何のことやねんってならないための解説です。何となくわかる(かもしれない)シリーズ第二弾。

開発者向けの話ではないので、ざっくり説明します。まあ雰囲気をつかんでいただければ。何か質問とかあったらコメントしてください。


レシーバーってなに?

フルネームは「BroadcastReceiver(ブロードキャストレシーバー)」です。つまり、「どこかからブロードキャストされた何か」を受信するのがレシーバーです。broadcastreceiveの意味を見れば、まあそのまんまだなと思いますよね。

何を受け取るの?

例えば、こんなものがあります。

  • スクリーンがオンになった
  • 端末の起動が完了した
  • バッテリー残量が変化した
  • バッテリー残量が少なくなった
  • アプリがインストールされた
  • アプリが更新された
  • アプリがアンインストールされた

誰が送信してるの?

前項の例では、Androidシステム側がばしばし飛ばしてくれます。

つまり、システムがばんばんブロードキャストを飛ばしてるから、情報が欲しいアプリは各々でレシーバーを登録することで、いろんな状況の変化を簡単に検知できるってわけです。

ちなみに、独自にブロードキャストを送信したり、それを受信することもできます。

静的な登録と動的な登録

ブロードキャストには、AndroidManifest.xml(アプリのバージョン、要求パーミッション、使うアクティビティなどの情報をまとめたファイル)に書き込むだけで受信できるタイプと、サービスやアクティビティから登録する必要があるタイプがあります。

前者の代表的な例は「BOOT_COMPLETED」ですね。端末の起動完了を検知する場合は、AndroidManifest.xmlに書き込むだけでオッケーです。後者は色々ありますが、スクリーンオンの検知とかが当てはまります。

ユーザー視点からの二つの差ですが、後者の場合は通常「サービスを常駐させて受信する」必要があります。電話の誤発信防止アプリやTaskerなどのアプリが常駐するのは、こういったブロードキャストを受信するためです。(もちろん、サービス常駐の目的はブロードキャストだけではありません。あくまで一例です。)

0 件のコメント:

コメントを投稿