检查来自不同 Activity 的 AlarmIntent

Checking AlarmIntent from different Activity

我创建了一个重复闹钟

        Intent intent = new Intent(StartActivity.this, NotificationService.class);
        intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION);
        PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), updateFrequency * 1000, pintent);

到目前为止,这是按预期工作的。我用这个

检查我的闹钟是否激活
    Intent intent = new Intent(StartActivity.this, NotificationService.class);
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION);
    return (PendingIntent.getBroadcast(getApplicationContext(), ALARM_ID,
            intent,
            PendingIntent.FLAG_NO_CREATE) != null);

这也很好用。当我需要检查我的闹钟是否由另一个 activity(在我的例子中是设置 Activity)设置时,问题就出现了。

我无法使用第二个功能进行检查,因为设置 Activity 无法访问 "StartActivity.this",所以我无法重新创建相同的意图。

这应该是简单的事情,我希望我错过了什么,但我尝试了多种设置意图的方法,这样我就可以在不同的活动中检查它的警报,但到目前为止还没有找到。我找到了这个答案:Android How to stop AlarmManager in other Activity 但它对我也不起作用。

有办法吗?

TL;DR:在 Activity A 中创建警报,需要检查它是否在 Activity B 中处于活动状态。

我用这段代码解决了这个问题:

public static boolean isNotificationAlarmSet(Context context, int alarmId){
    Intent intent = new Intent(context, NotificationService.class);
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION);
    return (PendingIntent.getService(context, alarmId, intent, PendingIntent.FLAG_NO_CREATE) != null);
}

public static void setNotificationAlarm(Context context, int alarmId, int frequency) {
    Intent intent = new Intent(context, NotificationService.class);
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION);
    PendingIntent pintent = PendingIntent.getService(context, alarmId, intent, 0);
    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), frequency, pintent);
}

public static void removeNotificationAlarm(Context context, int alarmId) {
    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, NotificationService.class);
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION);
    PendingIntent p = PendingIntent.getService(context, alarmId, intent, 0);
    if (p != null) {
        alarm.cancel(p);
        p.cancel();
    }
}

我发现提供的上下文并不重要,您可以使用 getApplicationContext();