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)
}