AlarmManager

AlarmManagerを使うと、指定した時刻に指定したIntentの処理を実行できる・・・。

AlarmManager | Android Developers

Activityを呼ぶIntentを指定することで、Activityを起動したり、Serviceを呼ぶIntentを指定することでServiceを起動したり、ブロードキャストインテントで別のアプリを呼ぶこともできる・・・。

今回は5秒後に別のアクティビティを起動してみるが、このあとのPendingIntentの項の準備もしておく・・・。

メインとなるactivity_main.xmlは、

TextViewでactivity_main_textview_textにある文字列を表示・・・。

起動されるサブのactivity_sub.xmlは、

TextViewでactivity_sub_textview_textにある文字列を表示・・・。

strings.xmlは、

activity_main_textview_textは、"MainActivity"・・・。
activity_sub_textview_textは、"SubActivity"・・・。

という感じでアクティビティ名を表示・・・。

起動されるSubActivity.javaは、

追加したときのまま・・・。
とくに変更なし・・・。

起動するMainActivity.javaは、

CustomReceiverは、次のPendingIntentの項の準備なので、ここでは無視していい・・・。

まず、SubActivityを呼ぶintentを作成・・・。
そしたら、PendingIntent.getActivityにintentを指定すると、指定したintentにセットしたアクティビティを起動するPendingIntentのインスタンスpendingIntentが返ってくる・・・。

PendingIntent | Android Developers

AlarmManagerに指定するインテントはPendingIntentでないといけないので、こういう感じになっている・・・。
(起動するだけなのに、なんでIntentをPendingIntentに渡して、AlarmManagerに渡すという二度手間なのかよくわからない・・・。)

Calendar.getInstanceでCalendarのインスタンスを取得したら、
calendar.setTimeInMillisにSystem.currentTimeMillisをセットすることで、現在時刻をセット・・・。
calendar.addでCalendar.SECONDを5ずらす・・・。つまり5秒後になる・・・。

getSystemServiceでalarmManagerを取得したら、alarmManager.setで、calendar.getTimeInMillisでセットした時刻、pendingIntentをセットする・・・。

これで、SubActivityを5秒後に起動する準備は整ったが、PendingIntentの項の準備がまだある・・・。

BroadcastReceiverの派生クラスCustomReceiver.javaは、

onReceiveでブロードキャストインテントが来たら、Intentのiにパッケージ名とSubActivityのアクティビティ名を指定して、context.startActivityで起動・・・。
これで、ブロードキャストインテントでもSubActivityが起動する・・・。

さらにAndroidManifest.xmlで、

SubActivityとCustomReceiverのタグを追加・・・。
CustomReceiverはintent-filterでactionにandroid:name="CUSTOM_ACTION"を指定しておく・・・。
これでactionにCUSTOM_ACTIONを指定したインテントを拾える・・・。

とりあえず、今回はMainActivityからSubActivityの起動だけやってみる・・・。

f:id:BG1:20161226171913p:plain

起動するとこうなる・・・。
MainActivity・・・。
しかし、だいたい5秒ぐらい経つと、

f:id:BG1:20161226171953p:plain

このようにSubActivityが起動する・・・。

このあと、バックキーで終わるのではなく、ホームキーでアプリを選べる状態にして、PendingIntentのSampleアプリを起動すると、PendingIntentでやりたいことが成功する・・・。
(それはこの次に・・・。)

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