[英]How to cancel and set AlarmManager at the same time
我目前正在做的是使用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)(假设以上操作无效)如何更改警报间隔时间?
第二个参数,当前为System.currentTimeMillis()
,是您希望重复发出警报的时间。 因此,将其设置为当前时间将立即触发警报。 将其设置为System.currentTimeMillis() + (1000 * minutes * 60)
应该可以解决您的问题。
请参考文档: https : //developer.android.com/reference/android/app/AlarmManager.html#setInexactRepeating(int,+long,+long,+android.app.PendingIntent)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.