这是如何重置警报的?

时间:2016-09-22 06:21:20

标签: android android-intent alarmmanager

我一直在阅读本教程,用于创建重复的应用程序:

http://rdyonline.net/android-bytes-alarms/

我按照说明进行操作,效果很好。但是,如果我不理解它是如何工作的,我就不喜欢使用它。

警报管理器正在使用版本> = 19而不是警报重复(精确),它需要一个关闭警报,在退出意图时重置。

现在正如我所说的那样,它每15分钟就会消失(在我的版本中)。我可以看到他们正在用意图捆绑数据,但我真的不明白什么是重新触发单发警报。

这是他们的代码:

  

重复闹钟

     

如果您在API 19(KitKat)之前定位任何Android版本,或者,   你不需要它们,然后重复警报很好   简单。在这种情况下,您只需要使用setRepeating调用。

     

在某些情况下,设置重复闹铃非常重要   这是准确的,我会详细介绍如何处理   此

     

这里的诀窍是确保你一旦安排下一个警报   之前的闹钟响起。你必须检查你是否报警   已经设置了重复,并确保平台   你正在运行的是API 19以上

@Override
public void onReceive(android.content.Context context,
        android.content.Intent intent) {

    WrappedAlarmManager am = new WrappedAlarmManager(context);

    Bundle extras = intent.getExtras();
    if (am.isSingleAlarm(extras)) {

        Toast.makeText(context, "Single alarm", Toast.LENGTH_SHORT).show();

    } else if (am.isRepeatAlarm(extras)) {

        Toast.makeText(context, "Repeat alarm", Toast.LENGTH_SHORT).show();

        if (android.os.Build.VERSION.SDK_INT >= 19) {
            am.scheduleRepeatingAlarm(context);
        }
    }
}
  

快速检查是否是重复警报然后重复   警报再次安排。以下是两种相关的处理方法   有了这个逻辑:

public boolean isRepeatAlarm(Bundle extras) {
    return extras.containsKey(KEY_REPEAT) && extras.getBoolean(KEY_REPEAT);
}


    public void scheduleRepeatingAlarm(Context context) {
        Intent intent = new Intent(context, NotificationReceiver.class);
        Bundle extras = new Bundle();
        extras.putBoolean(KEY_REPEAT, true);
        intent.putExtras(extras);
        PendingIntent pIntent = PendingIntent.getBroadcast(context,
                REPEAT_ALARM_ID, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        Calendar futureDate = Calendar.getInstance();
        futureDate.add(Calendar.SECOND, (int) (INTERVAL_SEVEN_SECONDS / 1000));

        if (android.os.Build.VERSION.SDK_INT >= 19) {
            setSingleExactAlarm(futureDate.getTime().getTime(), pIntent);
        } else {
            mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, futureDate
                    .getTime().getTime(), INTERVAL_SEVEN_SECONDS, pIntent);
        }
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

要在SDK versions >= 19中安排重复警报,当收到警报广播时,会检查布尔值KEY_REPEAT,如果为真,则会安排一个精确警报INTERVAL_SEVEN_SECONDS / 1000秒后来。 在INTERVAL_SEVEN_SECONDS / 1000秒之后,再次接收广播并设置下一个alram。 接收广播和调度下一个警报周期连续重复。