我创建了重复闹钟
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中有效。
答案 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();