我已经阅读了有关setRepeating闹钟的大部分帖子,似乎没有一个可以解决我的问题。
我在设定的时间内设置了两个重复的闹钟,如下所示:
trigger = System.currentTimeMillis()
+ (Integer.parseInt(test) * 60 * 1000);
workLength = (long) (Integer.parseInt(test) * 60 * 1000);
breakLeng = (long) (Integer.parseInt(breakLength) * 60 * 1000);
private void recurringInitialAlarm() {
// TODO Auto-generated method stub
// work inital
alarm.set(AlarmManager.RTC_WAKEUP, trigger, pintent);
SharedPreferences pref = getActivity()
.getSharedPreferences("pref", 0);
SharedPreferences.Editor edit = pref.edit();
System.out.println("initial work alarm set");
edit.putString("takeBreak", "true");
edit.commit();
System.out.println("takeBreak = true");
}
private void recurringWorkAlarm() {
// TODO Auto-generated method stub
// work recurring
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), (2 * workLength) + breakLeng,
pintent3);
System.out.println("work recurring"
+ ((2 * workLength) + breakLeng));
}
private void recurringBreakAlarm() {
// TODO Auto-generated method stub
// break
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), workLength + breakLeng, pintent2);
System.out.println("break times"
+ workLength + breakLeng);
}
其中挂起的意图由:
指定Intent intent = new Intent(getActivity(), AlarmReceiver.class);
final PendingIntent pintent = PendingIntent
.getBroadcast(getActivity(), 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
final PendingIntent pintent2 = PendingIntent
.getBroadcast(getActivity(), 2, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
final PendingIntent pintent3 = PendingIntent
.getBroadcast(getActivity(), 3, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
问题是两个重复的警报在创建后大约10秒后发生,并且在两者之间随机发生。我知道,对于KitKat设备,警报并不准确,并且可能会有所不同,但是,从长远来看,它确实会在之后的时间内正确发送通知。
例如,当我将两个重复设置为彼此正好一分钟时:
17:09:20 - 启动报警管理器
17:09:35 - 两个重复警报都被解雇了
17:10:23 - 一个被解雇了
17:11:28 - 一个被解雇了
17:12:34 - 一个被解雇等......
问题:如何在大约10秒后解除这些随机通知?
答案 0 :(得分:1)
警报“立即”(15秒后)触发的原因是您为System.currentTimeMillis()
安排了第一个事件 - 并且AlarmManager在15秒内完成了这个事件,这非常接近。
您需要执行类似设置System.currentTimeMillis() + initial_wait_period