我一直在阅读本教程,用于创建重复的应用程序:
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);
}
}
感谢您的帮助
答案 0 :(得分:1)
要在SDK versions >= 19
中安排重复警报,当收到警报广播时,会检查布尔值KEY_REPEAT
,如果为真,则会安排一个精确警报INTERVAL_SEVEN_SECONDS / 1000
秒后来。
在INTERVAL_SEVEN_SECONDS / 1000
秒之后,再次接收广播并设置下一个alram。
接收广播和调度下一个警报周期连续重复。