全てのアプリに対して投げるインテントをブロードキャストインテントと言い、それは例えばバッテリーの減少通知や、端末の起動通知、航空機モードへの切り替え通知など、システムから何かが発生したことを通知するときに使われることが多い・・・。
(またサービスとアクティビティのやりとりなどにも使われる・・・。ただ、ブロードキャストである必要あるのだろうか・・・。)
ブロードキャストインテントを取得し、それに対する処理を書く場合はBroadcastReceiverを使う・・・。
BroadcastReceiver | Android Developers
今回は航空機モードへの切り替え通知を拾う・・・。
プロジェクトを作成したら、BroadcastReceiverの派生クラスCustomReceiverを定義して、
onReceiveハンドラでブロードキャストインテントを受け取れるので、intent.getAction()でアクションがACTION_AIRPLANE_MODE_CHANGED(航空機モードへの変更が行われた時)だった時、トーストで"Received! ACTION_AIRPLANE_MODE_CHANGED"を表示する・・・。
(Toast.makeTextの1つ目のcontextは、onReceiveに渡されるcontextを使えばいい・・・。)
これだけでは、ブロードキャストインテントを受け取る体制にはなっていない・・・。
AndroidManifest.xmlで、
receiverタグを追加・・・。
nameには".CustomReceiver"を指定・・・。
intent-filterにactionとして、"android.intent.action.AIRPLANE_MODE"を指定・・・。
これでACTION_AIRPLANE_MODE_CHANGEDについては受け取ることができる・・・。
他のを受け取りたい場合は、他のものをintent-filterに追加する・・・。
今回も実機で、
を起動すると、
UIをいじってないので"Hello world!"・・・。
ここで上からプルダウン・・・。
通知一覧から右上の設定・・・。
その他の設定・・・。
機内モードのチェックを付けると、
トーストが表示される・・・。
チェックマークを外してもトーストが表示される・・・。(変更された時に発生するため・・・。)