package com.example.shiftalarm import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager import java.util.concurrent.TimeUnit /** * 부팅 완료 시 알람 복구 리시버 */ class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent?) { if (intent?.action == Intent.ACTION_BOOT_COMPLETED) { android.util.Log.d("ShiftAlarm", "[부팅] 기기 부팅 감지, 알람 복구 시작") // 즉시 1회 실행 → 당일 알람 복구 val immediateWork = OneTimeWorkRequestBuilder().build() WorkManager.getInstance(context).enqueueUniqueWork( "BootAlarmRestore", androidx.work.ExistingWorkPolicy.REPLACE, immediateWork ) // 24시간 주기 반복 워커 등록 (자정에 실행) val periodicWork = PeriodicWorkRequestBuilder(24, TimeUnit.HOURS) .setInitialDelay(calculateDelayToMidnight(), TimeUnit.MILLISECONDS) .build() WorkManager.getInstance(context).enqueueUniquePeriodicWork( "DailyShiftCheck", ExistingPeriodicWorkPolicy.KEEP, periodicWork ) android.util.Log.d("ShiftAlarm", "[부팅] 알람 복구 워커 등록 완료") } } private fun calculateDelayToMidnight(): Long { val seoulZone = java.time.ZoneId.of("Asia/Seoul") val now = java.time.LocalDateTime.now(seoulZone) val midnight = now.plusDays(1).withHour(0).withMinute(5).withSecond(0) // 00:05에 실행 return java.time.Duration.between(now, midnight).toMillis() } }