2015-12-10 2 views
0

Я создал повторяющийся будильник, который гаснет каждую минуту. Я создал класс с 2 статическими функциями для запуска и отмены тревоги. Я сделал это, чтобы начать и отменить его из нескольких мест. Запуск аварийной сигнализации работает нормально, но отмена - нет. Контекст, который я использую при вызове startAlarm и cancelAlarm, - getApplicationContext(). Я думаю, что это может быть проблемой с контекстом, но я не уверен. Есть идеи?Отмена повторной тревоги в Android

Это мой класс

public class Alarm { 

    public static PendingIntent pendingIntent; 
    public static AlarmManager manager; 
    public static Intent alarmIntent; 

    public static void startAlarm(Context context) { 

    Log.e("ALARM", "------------STARTED----------------"); 
    alarmIntent = new Intent((context), AlarmReceiver.class); 
    alarmIntent.setAction("NOTIFICATION_ALARM"); 
    pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); 
    manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    int alarmType = AlarmManager.RTC_WAKEUP; 
    Calendar cal = Calendar.getInstance(); 


    long intervalTime = 1 * 60 * 1000; 
    manager.setRepeating(alarmType, cal.getTimeInMillis(), intervalTime, pendingIntent); 

    } 

    public static void cancelAlarm(Context context) { 

     alarmIntent = new Intent(context, AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); 
     manager = (AlarmManager)  context.getSystemService(Context.ALARM_SERVICE); 
     if (manager != null) { 
      Log.e("ALARM", "------------STOPPED----------------"); 
      manager.cancel(pendingIntent); 
     } 
    } 
} 
+0

am.cancel (pendingIntent); –

+0

Ваше намерение в ожидании, которое вы отменяете, должно соответствовать тому, которое вы использовали для настройки будильника. То есть вам нужно вызвать 'alarmIntent.setAction (" NOTIFICATION_ALARM ");' в методе 'cancelAlarm()'. –

+0

@ Джейсон Ли положить ваш журнал ошибок пожалуйста. –

ответ

0

Используйте cancel() на AlarmManager с его PendingIntent на который вы использовали с setRepeating():

Intent intent = new Intent(this, AlarmReceive.class); 
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
+0

Не знаю, как это сделать, поскольку я хочу отменить его в другом статическом методе. Также попытался объявить PendingIntent в классе вместо методов, но, похоже, это не работает, так как у меня нет контекста, чтобы дать его. –

+0

Посмотрите на Mike M soultion –

0

Intent на PendingIntent вы отменяющих потребности в соответствии с тем, что вы использовали для установки будильника, как определено методом Intent#filterEquals(Intent). То есть, вам нужно позвонить alarmIntent.setAction("NOTIFICATION_ALARM"); в методе cancelAlarm().

Смежные вопросы