AlarmManager + Notification Guide
setExactAndAllowWhileIdle
val alarmManager = context.getSystemService<AlarmManager>()
val intent = Intent(context, AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(
context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
alarmManager?.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 60000,
pendingIntent
)
BroadcastReceiver Notification
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val notification = NotificationCompat.Builder(context, "CHANNEL_ID")
.setContentTitle("Alarm!")
.setSmallIcon(R.drawable.ic_alarm)
.build()
NotificationManagerCompat.from(context)
.notify(1, notification)
}
}
BOOT_COMPLETED Restore
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
scheduleAllAlarms(context)
}
}
}
Repeating Alarms
alarmManager?.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
triggerTime,
AlarmManager.INTERVAL_DAY,
pendingIntent
)
Compose UI Integration
@Composable
fun AlarmScheduler(onSchedule: (Long) -> Unit) {
var selectedTime by remember { mutableStateOf(System.currentTimeMillis()) }
Button(onClick = { onSchedule(selectedTime) }) {
Text("Schedule Alarm")
}
}
8 Android app templates on Gumroad
Top comments (0)