読者です 読者をやめる 読者になる 読者になる

PendingIntent

Android

PendingIntentは、作成したらすぐに起動するインテントではなく、指定した時間やタイミングに起動するようなタイプのインテント・・・。

PendingIntent | Android Developers

AlarmManager以外にもRemoteViewなので使うのだが、まあ一番わかりやすいのはAlarmManagerかなとおもって、前回も扱った・・・。

でPendingIntentでは、アクティビティを起動するインテント以外に、サービスを起動するインテントと、ブロードキャストインテント用のものがある・・・。

今回は、ブロードキャストインテント用のインテントを取得し、ブロードキャストインテントで前回のAlarmManagerのSampleアプリのSubActivityを起動してみる・・・。

activity_main.xmlは、

デフォルト状態のまま・・・。
hello_worldで・・・。

MainActivity.javaは、

AlarmManagerのSampleのMainActivityと違うのは、intentに指定するのは、"CUSTOM_ACTION"というアクション名だけ・・・。
そして、getBroadcastでブロードキャストインテントのpendingIntentを取得している・・・。

前回のAndroidManifest.xmlのCustomReceiverのintent-filterにこれをセットしてるので、AlarmManagerはこのintentに反応することができる・・・。

あとはこれも5秒後に起動するようにしておく・・・。

ブロードキャストインテントがonReceiveに着いたらSubActivityを起動するのだが、このときの起動するIntentのiは、
i.setClassNameでパッケージ名とクラス名を指定するものでないと落ちるみたいなので注意・・・。
(引数のcontextが呼び出し元のActivityじゃないこととかそういうのが影響してるのかな・・・。)

f:id:BG1:20161226180135p:plain

AlarmManager_を起動して、ホームボタンでバックグラウンドに回ってる間に、PendingIntent_を起動・・・。

f:id:BG1:20161226180244p:plain

5秒経つと、AlarmManager_のSubActivityが起動する・・・。
(アクション名自体はインテントフィルタのヒントとして使ったので、アクション名自体を何か処理したりということは今回していない・・・。)

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