Как проверить, установлен ли будильник - PullRequest
8 голосов
/ 17 января 2011

Я пытаюсь проверить, активен ли мой будильник или нет. Метод 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;
    }
}

Ответы [ 3 ]

14 голосов
/ 28 марта 2011

Вы просто должны добавить

pi.cancel();

после

am.cancel(pi);
1 голос
/ 12 мая 2013

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

0 голосов
/ 17 января 2011

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

...