Android Alarm

https://developer.android.com/reference/android/app/AlarmManager

https://qiita.com/upft_rkoshida/items/8149605f751137b4c21c

再起動すると登録が消えてしまうので android.intent.action.BOOT_COMPLETED インテントを受け取る BroadcastReceiver で、上記の保存情報を元に再登録する

https://developer.android.com/training/monitoring-device-state/doze-standby.html

#

fun doAlarm() {
    val manager = ContextCompat.getSystemService(context, AlarmManager::class.java) as AlarmManager

    val intent = Intent(context, Receiver::class.java).apply {
        action = Res.ACTION_CREATE_NOTIFICATION
    }
    val pIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)

    var mill = System.currentTimeMillis()
    mill += 10 * 1000
    manager.set(AlarmManager.RTC, mill, pIntent);
}

バージョンSからはpending intentにmutableかimmutableのフラッグを必ずつけなくてはならない #

val pIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    PendingIntent.getBroadcast(context, 0, intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE)
} else {
    PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}