TimePickerDialogで設定した時刻に、自分(MainActivity)を起動するようにAlarmManagerに登録します。
■サンプルソース
○src/jp.co.newral.sample.alarmmanager/MainActivity.java
package jp.co.newral.sample.alarmmanager;
import java.util.Calendar;
import java.util.TimeZone;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.widget.TimePicker;
public class MainActivity extends Activity implements OnTimeSetListener {
private AlarmManager mAlarmManager;
private Calendar mCalendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// AlarmManager取得
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
mCalendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));
// TimerPickerDialogを表示
// 第1引数:Applicationのcontext
// 第2引数:OnTimeSetListener
// 第5引数:24時間表記かどうか
TimePickerDialog timePickerDialog = new TimePickerDialog(this, this,
mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE), true);
timePickerDialog.show();
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mCalendar.setTimeInMillis(System.currentTimeMillis());
mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); // 時間設定
mCalendar.set(Calendar.MINUTE, minute); // 分設定
mCalendar.set(Calendar.SECOND, 0); // 秒設定 (今回は0固定)
// 自Activityを呼び出すインテント
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
// システムに保存され時間差で呼び出される、ペンディングインデント。
// 第2引数:未使用。(APIマニュアルより、"currently not used")
// 第4引数:FLAG_ONE_SHOT(一度きり)
// 他にFLAG_CANCEL_CURRENT(現在設定をキャンセルして上書き)など
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
0, intent, PendingIntent.FLAG_ONE_SHOT);
// AlarmManagerに登録。
// 第2引数:RTC(システム時刻)
// 他にRTC_WAKEUP(スリープしてたら起こす)、ELAPSED_REALTIME(起動後時間)など
mAlarmManager.set(AlarmManager.RTC, mCalendar.getTimeInMillis(), pendingIntent);
}
}