我没有使用setRepeat的方法,反而在每次进入这个闹钟的时候设定一个新闹钟
object SingleObject {
var TIME_INTERVAL = 20000//1000*60*3L//这是3分钟
var pendingIntent: PendingIntent? = null
var alarmManager: AlarmManager? = null
private const val POPUP_INTENT_ACTION = "pop_up_test_case"
init {
// 初始化定时任务
alarmManager =
ApplicationHolder.get().getSystemService(Context.ALARM_SERVICE) as? AlarmManager
val intent = Intent()
intent.action = POPUP_INTENT_ACTION
pendingIntent = PendingIntent.getBroadcast(ApplicationHolder.get(), 0, intent, 0);
register()
setNextClock()
}
private fun setNextClock() {
alarmManager?.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + TIME_INTERVAL,
pendingIntent
)
}
private val mTimingBroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == POPUP_INTENT_ACTION) {
trigger()
}
}
}
private fun register() {
ApplicationHolder.get().registerReceiver(
mTimingBroadcastReceiver,
IntentFilter(POPUP_INTENT_ACTION)
)
}
private fun unregister() {
if (pendingIntent != null && alarmManager != null) {
alarmManager?.cancel(pendingIntent)
}
ApplicationHolder.get().unregisterReceiver(mTimingBroadcastReceiver)
}
fun trigger() {
var isAllow = true
if (!isAllow)
unregister()
setNextClock()
}
}