Android-具有不同时间的多个警报在错误的时间触发

标签 android android-intent alarmmanager android-alarms repeatingalarm

我有四个Repeating Alarms在我的应用程序中,每个应用程序都会在不同的时间触发来执行一些重要的任务。 他们是

  1. 闹钟 1 - 凌晨 12:30
  2. 闹钟 2 - 凌晨 01:00
  3. 闹钟 3 - 凌晨 06:00
  4. 闹钟 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/

相关文章:

带有 OnItemClickListener 和 GestureDetector 的 Android ListView

android - 将 3gp 文件分享到 youtube 和 facebook

在 ListView 中使用 ratingbar 的 android 必需示例

java - 我不明白为什么会发生这个 ClassCastException

android - Android 6.0设置闹钟的精确方法

java - api类似于黑莓android中的AlarmManager

android - ViewTreeObserver 添加 OnScrollChangedListener 后不调用 onScrollChanged

android - 如何在照片后更新 Android 图库?

android - 如何将内部存储的图像添加到 Intent 中?

java - 清除 RAM 停止显示通知