我目前正在做的是,使用AlarmManager.SetAlarm(context)
启用并AlarmManager.CancelAlarm(context)
取消它。我使用的是IntentService
。
我想要做的是取消触发IntentService
的闹钟,然后重新设置,例如:
@Override
protected void onHandleIntent(Intent intent) {
FooAlarmManager foo = new FooAlarmManager();
foo.CancelAlarm(FooClass.this);
//Do some stuff
foo.SetAlarm(FooClass.this);
}
为什么我这样做?因为在FooAlarmManager
范围内,我从静态类中获取时间,例如:
public void SetAlarm(Context context) {
Integer minutes = StaticValuePass.getMins();
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, FooAlarmManager.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), 1000 * minutes*60, pi);
}
我正在设置onHandleIntent()
的时间值。所以基本上我在onHandleIntent()
内进行一些检查,并确定何时应该是下一个警报。
不幸的是,我上面的代码不起作用,原因是当你使用setAlarm()
时,它实际上会立即调用onHandleIntent()
。
所以在这种情况下我有两个问题,
1)我可以阻止setAlarm()
在首次创建时调用onHandleIntent()
吗?
2)(假设上述方法不起作用)如何更改闹钟间隔时间?
答案 0 :(得分:1)
第二个参数,当前为System.currentTimeMillis()
,是您希望重复闹钟首次关闭的时间。因此将其设置为当前时间将立即触发警报。将其设置为System.currentTimeMillis() + (1000 * minutes * 60)
可以解决您的问题。