Как проверить, установлен ли будильник

Я пытаюсь проверить, активна ли моя тревога или нет. Метод alarmIsSet вернет значение false до того, как будет установлен сигнал тревоги, true, если установлен будильник. Пока что так хорошо, однако после тревоги, которую я отменил, alarmIsSet будет продолжать возвращать true, пока я не перезагружу устройство. Как это исправить?

public class Alarm extends Activity { private Intent intent = new Intent("PROPOSE_A_TOAST"); private void alarm (boolean activate) { AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); if(activate == true) { int type = AlarmManager.ELAPSED_REALTIME_WAKEUP; long interval = 3000; long triggerTime = SystemClock.elapsedRealtime(); am.setRepeating(type, triggerTime, interval, pi); } else { am.cancel(pi); } } private boolean alarmIsSet() { return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_NO_CREATE) != null; } } 

Вам просто нужно добавить

 pi.cancel(); 

после

 am.cancel(pi); 

После некоторых головных болей с этим материалом я узнал, что если я каким-то образом создал ожидающее намерение при тестировании материала, то он фактически не очищался между тестами. Даже убить приложение не удалось. Намерение все еще оставалось в системе и продолжало возвращаться к истине при проверке. Я действительно должен был написать код, чтобы убить его, прежде чем он будет проверен правильно.

Самый простой способ – проверить значения (даты и) времени в переменной аварийного сигнала, если это не то же значение, что и при отсутствии сигнала тревоги (для проверки того, что это такое), то это указывает на тревогу Активен, и во время проверки в программе это либо время, прошедшее, и звуковой сигнал, либо время, которое еще не наступило, и сигнал тревоги еще не прозвучал или не погас. Обратите внимание, что правила могут разрешить только одну активацию тревоги для каждого сеанса устройства перед перезагрузкой или отключением питания или каждые 12 или 24 часа, и это может быть причиной того, что статус не очищается.