2016-06-29 6 views
0

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); 
} 
+0

Mögliche Duplikat [Wie diese sich wiederholenden Alarm löschen?] (Http://stackoverflow.com/questions/3330522/how-to-cancel-this-repeating-alarm) –

Antwort

0

es sein sollte:

public static void cancelAlarm(Context context) { 
Intent intent = new Intent(this, AlarmReceive.class); 
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.cancel(sender); 
} 

Dieser Artikel: How to cancel this repeating alarm?

+0

Ich habe gesehen, Dieser Artikel und das funktioniert nicht, siehe meine Bearbeitung. – Drakorex

0

den einzigartigen Anforderungscode auf anhängige Absicht festgelegt, während die Alarmeinstellung und brechen Sie mit dem gleichen Anforderungscode und kündigen die bevorstehende Absicht auch.

public static void cancelAlarm(Context context) { 
    Intent intent = new Intent(this, AlarmReceive.class); 
    PendingIntent sender = PendingIntent.getBroadcast(this, request_code, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(sender); 
    sender.cancel(); } 
0
Please try this 

public void cancelAlarmIfExists(Context mContext, int requestCode, Intent intent) { 
    try { 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode, intent, 0); 
     AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); 
     am.cancel(pendingIntent); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Verwandte Themen