Androidでのアラーム機能の実装

Android Studioを使用して、時計やカレンダー形式でアラームを設定する方法について説明します。
以下は、基本的なレイアウトXMLです。この例では、アラームを設定するためにTimePicker、EditText、Buttonを使用しています。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AlarmActivity">

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/edit_text_note"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="メモを入力"/>

    <Button
        android:id="@+id/button_set_alarm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="アラーム設定"/>
</LinearLayout>
アラームがトリガーされたときに表示されるダイアログの処理です。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alarm);

    Bundle bundle = getIntent().getExtras();
    if (bundle != null) {
        String note = bundle.getString("note");

        AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.setTitle("時間になりました!");
        dialog.setMessage(note);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "閉じる", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                finish();
            }
        });
        dialog.show();
    }
}
次に、アラームを設定するためのJavaコードです。CalendarクラスとAlarmManagerを使用して指定された時間を設定し、PendingIntentを作成します。
public void setupAlarm(View view) {
    EditText editText = findViewById(R.id.edit_text_note);
    DatePicker datePicker = findViewById(R.id.date_picker);

    String noteText = editText.getText().toString().trim();

    Intent intent = new Intent(this, AlarmReceiver.class);
    intent.putExtra("note", noteText);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();

    // DatePickerから日付情報を取得してcalendarオブジェクトに設定
    calendar.set(Calendar.YEAR, datePicker.getYear());
    calendar.set(Calendar.MONTH, datePicker.getMonth());
    calendar.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());

    // 時間を午前0時0分に設定
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);

    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

    Toast.makeText(this, "アラームが設定されました", Toast.LENGTH_SHORT).show();
}

タグ: Android AlarmManager PendingIntent

6月16日 18:42 投稿