无法检查AlarmManager是否设置了警报

Kev*_*rds 12 service android alarmmanager android-intent

我正在检查AlarmManager是否已使用此答案设置了警报.

以下是我的代码段.

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);
Run Code Online (Sandbox Code Playgroud)

但是,alarmUp始终设置为true.也就是说,无论我是否设置闹钟,每当我重新启动我的应用时,它都会告诉我这alarmUp是真的(我通过制作一个来检查它Toast).

请帮助我出错的地方.

Dav*_*ser 18

为了使此检查起作用,您需要绝对确定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();
}
Run Code Online (Sandbox Code Playgroud)