Android 多个警报,很少工作,很少不工作
陷入了一个问题 报警管理器 我开发了一种方法,将两个报警添加到Android 多个警报,很少工作,很少不工作,android,alarmmanager,android-pendingintent,Android,Alarmmanager,Android Pendingintent,陷入了一个问题 报警管理器 我开发了一种方法,将两个报警添加到AlarmManager数组中。下面给出的方法只需点击一次按钮,即可在AlarmManager数组中添加多达10个报警 我的方法代码如下所示 public void stupidAlarm() { stupidPendingIntentOne = PendingIntent.getBroadcast(context, listItemClickedPosition, stupidIntentOne, PendingInte
AlarmManager数组中。下面给出的方法只需点击一次按钮,即可在AlarmManager数组中添加多达10个报警
我的方法代码如下所示
public void stupidAlarm()
{
stupidPendingIntentOne = PendingIntent.getBroadcast(context, listItemClickedPosition, stupidIntentOne, PendingIntent.FLAG_UPDATE_CURRENT);
stupidPendingIntentTwo = PendingIntent.getBroadcast(context, listItemClickedPosition+5, stupidIntentTwo, PendingIntent.FLAG_UPDATE_CURRENT);
stupidAlarm[listItemClickedPosition]= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
stupidAlarm[listItemClickedPosition+5]= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmOneTime = settings.getString(AlarmOneTime, null);
alarmTwoTime = settings.getString(AlarmTwoTime, null);
try
{
OneHr = Integer.parseInt(muteTime.substring(0, 2));
OneMin = Integer.parseInt(muteTime.substring(2, 4));
TwoHr = Integer.parseInt(ringerTime.substring(0, 2));
TwoMin = Integer.parseInt(ringerTime.substring(2, 4));
}
catch(Exception ex)
{
Toast.makeText(context, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
stupidCalOne.set(2015, Calendar.MAY, 2);
stupidCalOne.set(Calendar.HOUR_OF_DAY, OneHr);
stupidCalOne.set(Calendar.MINUTE, OneMin);
stupidCalOne.set(Calendar.SECOND, 0);
stupidCalOne.set(Calendar.MILLISECOND, 0);
stupidCalTwo.set(2015, Calendar.MAY, 2);
stupidCalTwo.set(Calendar.HOUR_OF_DAY, TwoHr);
stupidCalTwo.set(Calendar.MINUTE, TwoMin);
stupidCalTwo.set(Calendar.SECOND, 0);
stupidCalTwo.set(Calendar.MILLISECOND, 0);
stupidAlarm[listItemClickedPosition].set(AlarmManager.RTC_WAKEUP, stupidCalOne.getTimeInMillis(), stupidPendingIntentOne);
stupidAlarm[listItemClickedPosition+5].set(AlarmManager.RTC_WAKEUP, stupidCalTwo.getTimeInMillis(), stupidPendingIntentTwo);
}
但问题是,10个警报中有一些是有效的,而有些不是!
在这种情况下,以下信息可能会有所帮助
AlarmOne 1047小时有效
报警两个1048Hrs工作
警报三个1049小时不工作
AlarmFour 1050小时工作两次
报警五1051小时不工作
AlarmSix 1052小时不工作
AlarmSeven 1053HS工作三次
AlarmEight 1054hs工作正常
AlarmNine 1055小时不工作
报警1056小时工作两次
我的日历、意图、悬而未决和警报管理声明
//for stupid alarm
public Calendar stupidCalOne;
public Calendar stupidCalTwo;
public Intent stupidIntentOne;
public Intent stupidIntentTwo;
public PendingIntent stupidPendingIntentOne;
public PendingIntent stupidPendingIntentTwo;
public AlarmManager[] stupidAlarm;
我在onCreate方法中的作业
//for stupid alarm
stupidCalOne = new GregorianCalendar();
stupidCalTwo = new GregorianCalendar();
stupidIntentOne = new Intent(context, OneAlarmReceiver.class);
stupidIntentTwo = new Intent(context, TwoAlarmReceiver.class);
stupidAlarm = new AlarmManager[10];
非常感谢您的帮助,请提前感谢操作系统允许批量报警
州政府的文件:
注意:从API 19开始,传递给此方法的触发时间被视为不精确:在此时间之前不会发出警报,但可能会延迟并在一段时间后发出。操作系统将使用此策略,以便在整个系统中一起“批量”报警,最大限度地减少设备需要“唤醒”的次数,并最大限度地减少电池的使用。一般来说,只要警报安排在遥远的将来,在不久的将来安排的警报不会延迟
这就是为什么有些时候会被跳过,然后在一分钟后发出另一个警报
我怀疑它们之间的距离越远,系统对它们进行批处理的可能性就越小,但你仍然无法保证使用此功能的报警时间
它继续说:
在新的批处理策略下,交货订单保证不像以前那样强大。如果应用程序设置了多个警报,则这些警报的实际交付顺序可能与其请求的交付时间顺序不匹配。如果您的应用程序有很强的排序需求,那么您可以使用其他API来获得必要的行为;请参见设置窗口(int,long,long,pendingent)和设置精确窗口(int,long,pendingent)
所以使用or。但请注意,setExact
:
注意:只有对准确时间交付有强烈需求的报警(如在请求的时间闹钟响)才应按准确时间安排。强烈建议应用程序不要不必要地使用精确警报,因为它们会降低操作系统最小化电池使用的能力
你提到的我错过的部分,非常感谢。它工作得很好。想要升级投票,但由于声誉限制而无法升级。