android - 无法检查警报是否已由 AlarmManager 设置

标签 android android-intent service alarmmanager

我正在检查 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/

相关文章:

symfony - Symfony Framework中的包,组件和服务之间有什么区别?

android - 将数据从 Activity 发送到 Intentservice

从 URL 到浏览器或其他 Activity 的 Android Image Intent

http - 用于开发 RESTful Web 服务的工具

Android:杀死(所有)前台运行的应用程序

android - 从 .NET 背景迁移到 Android - 术语类比

java - 在服务级别上测试 GWT/spring 应用程序

java - 运行 android Instrumentation 测试时为 "Cannot determine expansion folder"

java - Android 中使用自定义 View 的加载动画

android - 单击 ListView 上的删除按钮后删除 ListView 上的项目