从不同的Activity检查AlarmIntent

时间:2015-02-05 14:25:53

标签: android android-intent android-activity alarmmanager

我创建了重复闹钟

        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);

这也很好。当我需要检查我的警报是否来自另一个活动(在我的情况下是SettingsActivity)时,会出现问题。

我无法使用第二个函数进行检查,因为SettingsActivity无法访问" StartActivity.this",因此我无法重新创建相同的意图。

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

有办法做到这一点吗?

TL; DR:在活动A中创建闹钟,需要检查它是否在活动B中有效。

1 个答案:

答案 0 :(得分:1)

我使用此代码解决了它:

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();