我有四个Repeating Alarms
在我的应用程序中,每个应用程序都会在不同的时间触发来执行一些重要的任务。
他们是
- 闹钟 1 - 凌晨 12:30
- 闹钟 2 - 凌晨 01:00
- 闹钟 3 - 凌晨 06:00
- 闹钟 4 - 中午 12:15
每个警报都会触发,没有任何问题。每个警报的时间间隔为 24 hrs
。但每次射击都是随机发生的。
Alarm Set Time Actual Firing Time
Alarm 1 12:30 AM 06:31 AM
Alarm 2 01:00 AM 06:01 AM
Alarm 3 06:00 AM 06:01 AM
Alarm 4 12:15 PM Still not fired 4 hours after that time
我的代码是
警报1
Intent myIntent=new Intent(MainPage.this,db_restore.class);
PendingIntent pi=PendingIntent.getBroadcast(MainPage.this,1,myIntent,0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.AM_PM,Calendar.AM);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),1000*60*60*24,pi);
警报2
Intent mor_flag=new Intent(MainPage.this,MorningFlag.class);
PendingIntent mor_intent=PendingIntent.getBroadcast(MainPage.this,3,mor_flag,0);
AlarmManager mor_alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.AM_PM,Calendar.AM);
mor_alarm.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),1000*60*60*24,mor_intent);
警报3
Intent late_start1=new Intent(MainPage.this,late_start.class);
PendingIntent piLate=PendingIntent.getBroadcast(MainPage.this,2,late_start1,0);
AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.AM_PM,Calendar.AM);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*60*24, piLate);
Toast.makeText(MainPage.this,"Alarm Service started for Late Start monitoring",Toast.LENGTH_LONG).show();
警报4
Intent eve_flag=new Intent(MainPage.this,EveningFlag.class);
PendingIntent eve_intent=PendingIntent.getBroadcast(MainPage.this,4,eve_flag,0);
AlarmManager eve_alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.AM_PM, Calendar.PM);
eve_alarm.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),1000*60*60*24,eve_intent);
我不知道我做错了什么。请看一下并帮助我。谢谢。
注意:我正在 API Level 19
中检查此内容Android 4.4.4
最小为 14。
最佳答案
来自 API 文件( https://developer.android.com/training/scheduling/alarms.html )
从 Android 4.4(API 级别 19)开始,所有重复闹钟都不准确。这意味着 Android 会同步来自多个应用程序的重复警报并同时触发它们。
因此,如果您想要精确的警报,请使用警报管理器的
setExact(int类型,longtriggerAtMillis,PendingIntent操作)
方法。 如果您想以精确的时间重复闹钟,那么您必须编写一个逻辑,在其中设置闹钟(不是重复闹钟),并在该闹钟响起时为下一个时间间隔设置另一个闹钟。
关于Android-具有不同时间的多个警报在错误的时间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036561/