AlarmManager 未创建警报
AlarmManager not creating an alarm
我正在尝试向我的应用添加一些 "reminders" 功能。我想设置一个 AlarmManager
并在警报发生时触发一个 Notification
。
我添加了一些方法来创建警报、取消警报以及查看警报是否处于活动状态。
以下代码在 Settings.class
中,它扩展了 Activity
:
private boolean getRemindersEnabled() {
return (PendingIntent.getBroadcast(this,
1,
new Intent(this, Main.class),
PendingIntent.FLAG_NO_CREATE) != null);
}
private void enableReminders() {
AlarmManager alarmMgr;
PendingIntent alarmIntent;
alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, Main.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, mDayStart);
calendar.set(Calendar.MINUTE, 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
SIXY_MINUTES,
alarmIntent);
mRemindersEnabled = getRemindersEnabled();
populateReminders();
}
private void disableReminders() {
AlarmManager service = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, Main.class);
PendingIntent pending = PendingIntent.getBroadcast(this,
0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
service.cancel(pending);
mRemindersEnabled = getRemindersEnabled();
populateReminders();
}
当我调用 enableReminders()
时,它会创建警报。但是,getRemindersEnabled()
returns 错误。有什么我没能做到的吗?
getRemindersEnabled()
应该使用与创建警报的 PendingIntent
相同的 requestCode
。在这种情况下,您使用的是 1
,正确的是 0
.
private boolean getRemindersEnabled() {
return (PendingIntent.getBroadcast(this,
0,
new Intent(this, Main.class),
PendingIntent.FLAG_NO_CREATE) != null);
}
[编辑]
要取消警报,请在调用 service.cancel(intent);
之前,使用标记 FLAG_UPDATE_CURRENT
调用 pending.cancel();
PendingIntent pending = PendingIntent.getBroadcast(this,
0,
intent,
PendingIntent. FLAG_UPDATE_CURRENT);
pending.cancel();
service.cancel(pending);
我正在尝试向我的应用添加一些 "reminders" 功能。我想设置一个 AlarmManager
并在警报发生时触发一个 Notification
。
我添加了一些方法来创建警报、取消警报以及查看警报是否处于活动状态。
以下代码在 Settings.class
中,它扩展了 Activity
:
private boolean getRemindersEnabled() {
return (PendingIntent.getBroadcast(this,
1,
new Intent(this, Main.class),
PendingIntent.FLAG_NO_CREATE) != null);
}
private void enableReminders() {
AlarmManager alarmMgr;
PendingIntent alarmIntent;
alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, Main.class);
alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, mDayStart);
calendar.set(Calendar.MINUTE, 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
SIXY_MINUTES,
alarmIntent);
mRemindersEnabled = getRemindersEnabled();
populateReminders();
}
private void disableReminders() {
AlarmManager service = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, Main.class);
PendingIntent pending = PendingIntent.getBroadcast(this,
0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT);
service.cancel(pending);
mRemindersEnabled = getRemindersEnabled();
populateReminders();
}
当我调用 enableReminders()
时,它会创建警报。但是,getRemindersEnabled()
returns 错误。有什么我没能做到的吗?
getRemindersEnabled()
应该使用与创建警报的 PendingIntent
相同的 requestCode
。在这种情况下,您使用的是 1
,正确的是 0
.
private boolean getRemindersEnabled() {
return (PendingIntent.getBroadcast(this,
0,
new Intent(this, Main.class),
PendingIntent.FLAG_NO_CREATE) != null);
}
[编辑]
要取消警报,请在调用 service.cancel(intent);
之前,使用标记 FLAG_UPDATE_CURRENT
pending.cancel();
PendingIntent pending = PendingIntent.getBroadcast(this,
0,
intent,
PendingIntent. FLAG_UPDATE_CURRENT);
pending.cancel();
service.cancel(pending);