我正在检查 AlarmManager 是否已经使用 this answer 设置了警报.
以下是我的代码 fragment 。
boolean alarmUp = (PendingIntent.getBroadcast(MainActivity.this, 0,
new Intent(MainActivity.this, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) != null);
if (alarmUp) {
// alarm is set; do some stuff
}
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10 * 1000, pendingIntent);
但是,alarmUp
始终设置为 true。也就是说,无论我是否设置闹钟,每当我重新启动我的应用程序时,它都会告诉我 alarmUp
为真(我正在通过制作 Toast
来检查它)。
请帮助我出错的地方。
最佳答案
为了使此检查生效,您需要绝对确保 PendingIntent
仅在设置警报时存在。您可以做两件事来确保这一点:
1) 测试您的代码时,请确保卸载您的应用程序,然后在测试之前重新安装您的应用程序。卸载您的应用会删除您的应用可能已创建但仍未决的所有 PendingIntent
。
2) 取消闹钟时,确保同时取消PendingIntent
。你可以用
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
final PendingIntent pendingIntent =
PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent,
PendingIntent.FLAG_NO_CREATE);
if (pendingIntent != null) {
pendingIntent.cancel();
}
关于android - 无法检查警报是否已由 AlarmManager 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671964/