Androidアプリでアラーム機能を実装するには、TimePickerとAlarmManagerを活用します。ユーザーが指定した時刻に通知を表示する仕組みを構築できます。
UIレイアウトの設計
時刻選択とメモ入力用のシンプルなインターフェースをXMLで定義します:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TimePicker
android:id="@+id/picker_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<EditText
android:id="@+id/input_memo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="リマインダー内容を入力"
android:layout_marginTop="24dp" />
<Button
android:id="@+id/btn_schedule"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="アラーム登録"
android:textSize="18sp"
android:layout_marginTop="16dp" />
</LinearLayout>
アラームトリガーの設定
ボタンクリック時に指定時刻をカレンダーにセットし、システムのアラームサービスに登録します:
btn_schedule.setOnClickListener(v -> {
String memo = input_memo.getText().toString().trim();
if (memo.isEmpty()) return;
Intent triggerIntent = new Intent(this, ReminderReceiver.class);
triggerIntent.putExtra("memo", memo);
PendingIntent pending = PendingIntent.getBroadcast(
this, 0, triggerIntent, PendingIntent.FLAG_IMMUTABLE
);
AlarmManager scheduler = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar target = Calendar.getInstance();
target.set(Calendar.HOUR_OF_DAY, picker_time.getHour());
target.set(Calendar.MINUTE, picker_time.getMinute());
target.set(Calendar.SECOND, 0);
scheduler.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
target.getTimeInMillis(),
pending
);
Toast.makeText(this, "アラームを登録しました", Toast.LENGTH_SHORT).show();
});
通知ダイアログの表示
アラーム発火時に起動されるアクティビティで、ユーザーにリマインダーを表示します:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder);
String content = getIntent().getStringExtra("memo");
if (content == null) content = "リマインダー";
new AlertDialog.Builder(this)
.setTitle("⏰ 時間です!")
.setMessage(content)
.setPositiveButton("了解", (dialog, which) -> finish())
.setCancelable(false)
.show();
}
メニューから削除機能を追加
オプションメニューで「削除」を選択した際の確認ダイアログを表示:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.action_remove) {
new AlertDialog.Builder(this)
.setTitle("削除確認")
.setMessage("この項目を削除しますか?")
.setPositiveButton("はい", (dialog, which) -> {
setResult(RESULT_OK, new Intent().putExtra("action", "delete"));
finish();
})
.setNegativeButton("いいえ", null)
.show();
return true;
}
return super.onOptionsItemSelected(item);
}