我想在我的应用程序中触发每日闹钟。我可以看到警报每天在正确的时间触发2或3天,但之后不会触发。例如,如果我将警报设置为在上午08:00触发,它将在每天上午8点触发2或3天,之后不会触发警报。没有应用程序崩溃或任何东西,它只是不会触发。我有一个BroadcastReceiver
注册(AndroidManifest.xml
)这个警报,我可以看到每天在正确的时间打印日志,但只有2或3天。之后没有任何活动,应用程序似乎就会消失。
请在下面找到我的代码:
final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
final long intervalDay = 60*60*24*1000L;
final long alarmTime = calendar.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, intervalDay, pendingIntent);
我也使用了alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, AlarmManager.INTERVAL_DAY, pendingIntent);
,但它没有任何区别(虽然没想到它会产生任何影响)。
我不想使用alarmManager.setInexactRepeating()
,因为它不会在确切的时间触发警报,但会有轻微的延迟。
任何帮助表示赞赏!!
感谢。
答案 0 :(得分:0)
那是因为android无法保存警报内容超过2-3天。虽然我知道没有确定的射击解决方案。
我通过在每次触发警报时取消和重置警报来修复它。
像这样的东西。
而不是使用setRepeat
使用set或setExact来触发一次:
if(android.os.Build.VERSION.SDK_INT<Build.VERSION_CODES.KITKAT) {
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent);
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmtime, pendingIntent);
}
然后在执行任务后onRecieve()
的{{1}}方法中,重新启动闹钟,然后取消所有待处理的意图:
alarmReciever
希望它有所帮助。