從 CSV 讀取時間字串(格式 hh:mm,如 02:13),在該時刻觸發鬧鐘通知。
SimpleDateFormat 解析字串為 Date 物件。Date 轉為毫秒時間戳,傳給 AlarmManager.set()。public void setAlarmFromString(Context context, String timeStr, PendingIntent pendingIntent) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); // 24小時制
try {
Date parsedTime = sdf.parse(timeStr); // 如 02:13
Calendar cal = Calendar.getInstance();
cal.setTime(parsedTime);
// 保留年月日為今天,僅替換時分
Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY));
now.set(Calendar.MINUTE, cal.get(Calendar.MINUTE));
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
// 若該時間已過,改為明天
if (now.before(Calendar.getInstance())) {
now.add(Calendar.DAY_OF_YEAR, 1);
}
am.setExact(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), pendingIntent);
} catch (ParseException e) {
e.printStackTrace();
}
}
HH:mm(24小時制),避免 hh:mm(12小時制)造成上午/下午混淆。android.permission.SCHEDULE_EXACT_ALARM 或使用 setAndAllowWhileIdle。PendingIntent 需設定 FLAG_UPDATE_CURRENT 或 FLAG_IMMUTABLE (API 31+)。