gpt4 book ai didi

java - BOOT_COMPLETED 并且已经从 AlarmManager 执行了警报

转载 作者:行者123 更新时间:2023-11-29 21:28:18 26 4
gpt4 key购买 nike

我有一个来自 AlarmManager 的重复警报,每天早上 7:00 触发。根据文档,有一种叫做跳过警报的东西,一旦发现它落后于计划就会执行。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
pendingIntent);

我有一个 BOOT_COMPLETE 接收器,它启动我的 alarmService,主要问题是在早上 7:00 之后(因为将执行警报),设备在上午 9:00 或 7:00 之后的任何时间重启上午,警报第二次触发。虽然警报管理器正在做它应该做的事情,但这并不是我所期望的。

一个可能的解决方案是将 last_executed_day 保存到首选项中并在触发该警报通知之前检查它。

克服这种模式的可能方法是什么?虽然我建议,但我不认为这是标准的 hack,而且我很确定,你们中的大多数人都遇到过类似的问题。

最佳答案

您可以使用 Calendar.CompareTo Doc检查时间是否过去的方法,然后你可以启动服务。你可以尝试这样的事情:

代码:

Calendar current = Calendar.getInstance();
Calendar calSet = Calendar.getInstance();

calSet.set(Calendar.HOUR_OF_DAY, 7);
calSet.set(Calendar.MINUTE, 0);
calSet.set(Calendar.SECOND, 0);

if(calSet.compareTo(current) <= 0){
//If time passed add for tomo
calSet.add(Calendar.DATE, 1);
}

setAlarm(calSet);
}};

private void setAlarm(Calendar cal){


Intent intent = new Intent(getBaseContext(), CustomReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
pendingIntent);
}

关于java - BOOT_COMPLETED 并且已经从 AlarmManager 执行了警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19970296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com