AlarmManagerを指定した時間に発火させる
Android 6.0以降、Dozeモードが導入されて、AlarmManagerも影響を受けるようになりました。
AlarmManagerを指定した時間に発火させるには、
- Android 6.0(Marshmallow)以上:AlarmManger#setExactAndAllowWhileIdle()
- Android 4.4(KitKat)以上:AlarmManger#setExact()
- その他:AlarmManger#set()
を使い分ける必要があります。
AlarmManager alarmRegister = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmRegister.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmStartTime, alarmIntentRegister);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmRegister.setExact(AlarmManager.RTC_WAKEUP, alarmStartTime, alarmIntentRegister);
} else {
alarmRegister.set(AlarmManager.RTC_WAKEUP, alarmStartTime, alarmIntentRegister);
}
なお、AlarmManger#setExactAndAllowWhileIdle()には、
- 発火時の処理を10秒以内にする。
- 最短発火頻度は15分に1回
という制約があるそうです。