繁体   English   中英

如何同时取消和设置AlarmManager

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM