我现在一筹莫展。
请求代码收集在一个ArrayList中,这样当程序退出时,另一个函数可以清除所有警报。
现在的问题是:我的警报器打不响。我能够找到这个函数的错误。AlarmManager实例很好。我在底部设置了一个测试警报(在带有星号的行之后)。着火了。为什么???
clearAlarms();
int i=0;
ArrayList<Rule> allRulesWithTimeFrames = new ArrayList<Rule>();
allRulesWithTimeFrames = Rule.findRuleCandidatesByTimeFrame();
for(Rule oneRule : allRulesWithTimeFrames)
{
for(Trigger oneTrigger : oneRule.getTriggerSet())
{
if(oneTrigger.getTriggerType() == Event_Enum.timeFrame)
{
Calendar calNow, calSet;
Time setTime;
if(oneTrigger.getTriggerParameter())
setTime = oneTrigger.getTimeFrame().getTriggerTimeStart();
else
setTime = oneTrigger.getTimeFrame().getTriggerTimeStop();
calNow = Calendar.getInstance();
calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, setTime.getHours());
calSet.set(Calendar.MINUTE, setTime.getMinutes());
calSet.set(Calendar.SECOND, 0);
calSet.set(Calendar.MILLISECOND, 0);
// At this point calSet would be a scheduling candidate. It's just the day the might not be right, yet.
long milliSecondsInAWeek = 1000 * 60 * 60 * 24 * 7;
for(int dayOfWeek : oneTrigger.getTimeFrame().getDayList())
{
// --------------------
// Here's a lot of code I will spare you. It only changes
// the variable calSetWorkingCopy.
// --------------------
SimpleDateFormat sdf = new SimpleDateFormat("E dd.MM.yyyy HH:mm");
i++;
String calSetWorkingCopyString = sdf.format(calSetWorkingCopy.getTime()) + " RequestCode: " + String.valueOf(i);
Miscellaneous.logEvent("i", "AlarmManager", "Setting repeating alarm because of rule: " + oneRule.getName() + " beginning at " + calSetWorkingCopyString);
Intent alarmIntent = new Intent(automationServiceRef, AlarmListener.class);
PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, i, alarmIntent, 0);
centralAlarmManagerInstance.setInexactRepeating(AlarmManager.RTC_WAKEUP, calSetWorkingCopy.getTimeInMillis(), milliSecondsInAWeek, alarmPendingIntent);
requestCodeList.add(i);
}
}
}
}
// ************* The below code is working *************
// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.SECOND, 10);
SimpleDateFormat sdf2 = new SimpleDateFormat("E dd.MM.yyyy HH:mm");
String calSetWorkingCopyString2 = sdf2.format(cal.getTime());
Miscellaneous.logEvent("i", "AlarmManager", "Setting repeating alarm because of hardcoded test: beginning at " + calSetWorkingCopyString2);
Intent alarmIntent2 = new Intent(automationServiceRef, AlarmListener.class);
PendingIntent alarmPendingIntent2 = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent2, 0);
centralAlarmManagerInstance.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000, alarmPendingIntent2);
requestCodeList.add(0);
尝试替换这个
PendingIntent alarmPendingIntent2 = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent2, 0);
用这个
PendingIntent alarmPendingIntent2 = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent2, PendingIntent.FLAG_CANCEL_CURRENT);
问题内容: 我已在帖子中搜索了我的问题的答案,但没有找到能解决我问题的任何东西。我正在尝试使用一个AlarmSettings类设置3种不同的警报。当我设置两个警报时,第二个警报优先于第一个警报,第一个永不熄灭。我认为这可能与我的未决意图有关……我真的是android新手,非常感谢您的帮助。这是我设置警报的代码: 问题答案: 将0属性更改为警报的ID,例如,您有三个警报, 用0,1,2重复上述代码。
我想取消所有设置的警报。。。。。我已经搜索了很多,尝试了很多东西,但都没有成功。。。当我将闹钟设置为2分钟后,然后取消它时,2分钟后它仍会启动。。。。。任何帮助都将不胜感激。 创建警报的方法: 这是为了取消报警:
在我的代码中,我创建了一个警报,如下所示: 要取消警报,我执行以下操作: 移除任何具有匹配意图的警报。任何类型的警报,其意图与此警报匹配(由filterEquals(Intent)定义),都将被取消。 我不太确定“匹配意图”的定义是什么。如果我用上面的代码创建多个警报,然后按照显示的方式执行取消,它会取消我创建的所有警报吗?
我有一个应用程序,在指定的时间设置警报与TimePicker(24小时模式)。 我注意到,如果时间是23:00,而您将报警设置为01:00,AlarmManager会将其解释为已过日期。目前,我设置的警报如下所示: 正如你所看到的,该应用程序计算时差,如果时差为负值,则设置第二天的警报。这就产生了上面描述的bug。如何修复它? 当做 马库斯
我试过很多次了,但什么也没有。 这是类的代码,它应该设置警报,但在指定的时间和日期没有发生任何事情。
我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()