我的应用程序中有四个Repeating Alarms
,每个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
。但是每个人都在随机时间开火。
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);
我的代码是
警报1
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);
警报2
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();
警报3
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);
警报4
API Level 19
我不知道自己做错了什么。请看看并帮助我。感谢。
注意:我在Android 4.4.4
private void btnPrint_Click(object sender, EventArgs e)
{
PrintDialog.Document.PrintPage += (pSender, pE) => PrintEvent(pSender, pE, PrintInfo);
PrintDialog.Document.Print();
}
中检查此内容,最低为14。
答案 0 :(得分:1)
尝试使用AlarmManager.setExact()
并为this post
对于低于19的api级别,您应该使用
AlarmManager.setRepeating()
,并且您的警报将在指定时间准确触发。在api级别19及以上,这将不再有效。 android中有变化,所有重复警报都是不准确的。因此,如果您想要实现精确的重复警报,您应该使用AlarmManager.setExact()
安排警报,然后在下周警报触发时再进行警报,依此类推。
答案 1 :(得分:1)
来自API DOCS(https://developer.android.com/training/scheduling/alarms.html)
从Android 4.4(API级别19)开始,所有重复警报都不准确。这意味着Android会同步来自多个应用的重复警报并同时触发它们。
因此,如果您想要一个确切的闹钟,请使用闹钟管理器
setExact (int type, long triggerAtMillis, PendingIntent operation)
方法。 如果你想要精确计时重复报警,那么你必须写一个逻辑,你将设置一个警报(不是一个重复的警报),当这个警报响起时,为下一个间隔设置另一个警报。