2016-01-01 3 views
0

Я не могу отменить будильник. Я просмотрел другие сообщения в Stack Overflow, но никто из них не работал для меня.Android: не удается отменить AlarmManager

Вот мой код:

AddAlarm класс:

public void setAlarm(){ 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(AddAlarm.this, AlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(AddAlarm.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

    calAlarm = Calendar.getInstance(); 
    Calendar calNow = Calendar.getInstance(); 
    Date date = new Date(); 

    calNow.setTime(date); 
    calAlarm.setTime(date); 
    calAlarm.set(Calendar.HOUR_OF_DAY, pickHour); 
    calAlarm.set(Calendar.MINUTE, pickMinute); 
    calAlarm.set(Calendar.SECOND, 0); 

    if (calAlarm.before(calNow) || calAlarm == calNow){ 
     calAlarm.add(Calendar.DATE, 1); 
    } 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     am.setExact(AlarmManager.RTC_WAKEUP, calAlarm.getTimeInMillis(), pi); 
    } else { 
     am.set(AlarmManager.RTC_WAKEUP, calAlarm.getTimeInMillis(), pi); 
    } 
} 

public void cancelAlarm(){ 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(AddAlarm.this, AlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(AddAlarm.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

    am.cancel(pi); 
} 

ли вы, ребята, есть какие-то предложения? Благодаря!

+0

проверить это https: // stackoverflo w.com/a/17570455/9130109 –

ответ

1

пытаются использовать этот PendingIntent.FLAG_CANCEL_CURRENT вместо PendingIntent.FLAG_UPDATE_CURRENT как

PendingIntent pi = PendingIntent.getBroadcast(AddAlarm.this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);

+0

Привет, я уже пробовал это. К сожалению, это не сработало. –

+0

Вы уверены, что используете тот же тип намерения, что и время для получения дополнительной информации, посмотрите этот http://developer.android.com/reference/android/content/Intent.html#filterEquals(android.content.Intent). –

1

Я думаю, что вы не отменяя в ожидании намерения, попробуйте ниже фрагмент кода

private void cancelAlarm(int alarmId) 
{ 
    Intent intent = new Intent(this, AlarmManagerBroadcastReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(this, alarmId, 
      intent, 0); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.cancel(sender); 
    sender.cancel(); 
} 

Вызов cancelAlarm (0) метод для отмены вашего сигнала тревоги

+0

Привет, я пробовал это, но он тоже не работает. –

+0

Я также использую этот метод, вам нужно передать идентификатор тревоги (Uniq), который установлен для предыдущего сигнала тревоги –

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