BroadcastReceiver

全てのアプリに対して投げるインテントをブロードキャストインテントと言い、それは例えばバッテリーの減少通知や、端末の起動通知、航空機モードへの切り替え通知など、システムから何かが発生したことを通知するときに使われることが多い・・・。
(またサービスとアクティビティのやりとりなどにも使われる・・・。ただ、ブロードキャストである必要あるのだろうか・・・。)

ブロードキャストインテントを取得し、それに対する処理を書く場合は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に追加する・・・。

今回も実機で、

f:id:BG1:20160930152038p:plain

を起動すると、

f:id:BG1:20160930152104p:plain

UIをいじってないので"Hello world!"・・・。

f:id:BG1:20160930152147p:plain

ここで上からプルダウン・・・。
通知一覧から右上の設定・・・。

f:id:BG1:20160930152236p:plain

その他の設定・・・。

f:id:BG1:20160930152303p:plain

機内モードのチェックを付けると、

f:id:BG1:20160930152341p:plain

トーストが表示される・・・。

f:id:BG1:20160930152426p:plain

チェックマークを外してもトーストが表示される・・・。(変更された時に発生するため・・・。)

Sample/android/BroadcastReceiver/BroadcastReceiver/src/BroadcastReceiver at master · bg1bgst333/Sample · GitHub