Ich habe zu jeder vollen Stunde einen sich wiederholenden Alarm, um zu prüfen, ob eine Benachrichtigung gesendet werden muss. Ich habe Ein-/Aus-Tasten dafür, aber das Aus scheint es nicht zu löschen. Es gibt einige Fragen über das Abbrechen von Alarmen auf SO, aber konnte keiner von ihnen helfen. Hier ist was ich habe.So brechen Sie einen wiederholten Alarm ab
Hauptaktivität
public void onSendNotificationsButtonClick(View view) {
NotificationEventReceiver.setupAlarm(getApplicationContext());
}
public void stopSendNotificationsButtonClick(View view) {
NotificationEventReceiver.cancelAlarm(getApplicationContext());
}
Ereignisempfänger erweitert WakefulBroadcastReceiver
public static void setupAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmIntent = getStartPendingIntent(context);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
getTriggerAt(new Date()),
NOTIFICATIONS_INTERVAL_IN_HOURS * AlarmManager.INTERVAL_HOUR,
alarmIntent);
}
public static void cancelAlarm(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent alarmIntent = getDeleteIntent(context);
alarmIntent.cancel();
alarmManager.cancel(alarmIntent);
}
private static long getTriggerAt(Date now) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.HOUR, NOTIFICATIONS_INTERVAL_IN_HOURS); //change here to set notification interval
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTimeInMillis();
}
private static PendingIntent getStartPendingIntent(Context context) {
Intent intent = new Intent(context, NotificationEventReceiver.class);
intent.setAction(ACTION_START_NOTIFICATION_SERVICE);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static PendingIntent getDeleteIntent(Context context) {
Intent intent = new Intent(context, AlarmManager.class);
intent.setAction(ACTION_DELETE_NOTIFICATION);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Intent serviceIntent = null;
if (ACTION_START_NOTIFICATION_SERVICE.equals(action)) {
Log.i(getClass().getSimpleName(), "onReceive from alarm, starting notification service");
serviceIntent = NotificationIntentService.createIntentStartNotificationService(context);
} else if (ACTION_DELETE_NOTIFICATION.equals(action)) {
Log.i(getClass().getSimpleName(), "onReceive delete notification action, starting notification service to handle delete");
serviceIntent = NotificationIntentService.createIntentDeleteNotification(context);
}
if (serviceIntent != null) {
// Start the service, keeping the device awake while it is launching.
startWakefulService(context, serviceIntent);
}
}
edit: die Funktion Wechsel auf Antworten basiert, immer noch nicht den Alarm abzubrechen.
public static void cancelAlarm(Context context) {
Intent intent = new Intent(context, NotificationServiceStarterReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
Mögliche Duplikat [Wie diese sich wiederholenden Alarm löschen?] (Http://stackoverflow.com/questions/3330522/how-to-cancel-this-repeating-alarm) –