2016-07-05 2 views
0

У меня есть два будильника 1. Напоминание о прохождении маршрута 2. Уведомление об ошибках Пользователь может отменить напоминание о прогулке. Процесс отмены работает нормально.Получение ложных срабатываний при проверке, установлен ли диспетчер аварийных сигналов

private void setWalkReminder(){ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.HOUR_OF_DAY, 18); 
    calendar.set(Calendar.MINUTE, 50); 
    calendar.set(Calendar.SECOND, 0); 
    Intent walkIntent = new Intent(this, AlarmReceiver.class); 
    Log.d(TAG, "Started WALK SET"); 
    walkIntent.putExtra("alarmType", "walkReminder"); 
    PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
    walkAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 180000 /*AlarmManager.INTERVAL_DAY*/, walkPendingIntent); 

    workoutEditor = workoutPrefs.edit(); 
    workoutEditor.putBoolean("walkReminderIsSet", true); 
    workoutEditor.commit(); 
} 

private void cancelWalkReminder(){ 
    Intent walkIntent = new Intent(this, AlarmReceiver.class); 
    PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    Log.d(TAG, "Walk Canceled"); 
    AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE); 
    walkAlarmManager.cancel(walkPendingIntent); 
} 

Я проверяю, является ли сигнал тревоги устанавливается следующим способом:

boolean walkAlarmDown = (PendingIntent.getBroadcast(this, WALK_REMINDER, 
      new Intent(this, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) == null); 

    if (walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
     Log.d(TAG, "WALK REMINDER SET"); 
     setWalkReminder(); 
    } else if (!walkAlarmDown && !workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
     Log.d(TAG, "WALK REMINDER CANCELED"); 
     cancelWalkReminder(); 
    } else { 
     if(!workoutPrefs.getBoolean("walkReminderIsNeeded", true) && walkAlarmDown){ 
      Log.d(TAG, "Why is this false?"); 
     } else if (!walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){ 
      Log.d(TAG, "proper functioning"); 
     } 
} 

если пользователь повторно включает напоминание после того, как оно было отменено, то напоминание не получает набор снова. Выход Log.d: proper functioning. Это происходит потому, что walkAlarmDown все равно дает false. Я считаю, что это потому, что walkAlarmDown не стал истинным, когда будильник был отменен. Как обеспечить, чтобы walkAlarmDown стал истинным, когда будильник отменен?

Относительно этого, остается ли это правдой, потому что включен мой другой сигнал тревоги? Следовательно, только один сигнал тревоги отменяется, а другой сигнал остается активным. Он имеет другой код запроса на вещание. Поэтому я предполагаю, что это не должно быть проблемой.

ответ

0

walkPendingIntent по-прежнему активен, даже если будильник был отменен. Код, walkAlarmManager.cancel(walkPendingIntent);, должен сопровождаться walkPendingIntent.cancel(). Теперь walkAlarmDown даст истину после отмены тревоги.

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