Проблема с AlarmManager Android с настройкой и сбросом тревоги


9

Я использую Alarm для извлечения данных с сервера. Мне нравится давать пользователю возможность запускать и останавливать будильник. Это означает, что я должен проверить и проверить, установлен ли будильник. я нашел код, который говорит мне, если сигнал уже установлен:

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE); 
found = (P!=null); 

, если сигнализация уже установлена ​​ли я отменить его, но если он не установлен, то я поставил его (как переключатель)

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

здесь код, чтобы установить тревогу

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P); 

и вот код для отмены тревоги:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.cancel(P); 

Am I сбросить что-то после отмены тревоги, чтобы сделать это PendingIntent уйти ,

+1

Я не совсем уверен, почему вы выполняете проверку, чтобы увидеть, если сигнал уже существует. Можете ли вы объяснить свои рассуждения, пожалуйста? 10 фев. 112011-02-10 23:06:51

  0

Я хотел иметь кнопку, которая действует как включение/выключение. Также используйте кнопку в качестве индикатора, если моя настройка будильника была потеряна из-за сбоя приложения. Я использую будильник для обновления виджета, когда пользователь нажимает на виджет, он открывает активность, где пользователь может видеть, установлен ли будильник или нет. Я боюсь, что после того, как я установил будильник, он отключится, и пользователь не узнает, что он выключен. 11 фев. 112011-02-11 17:22:51

49

При отмене AlarmManager не используйте PendingIntent с флагом FLAG_CANCEL_CURRENT. Вместо отмены PendingIntent явно после отмены тревоги:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0); 
am.cancel(p); 
p.cancel(); 
+1

большое спасибо. p.cancel() помог здесь! 05 апр. 112011-04-05 12:09:53

+7

Вы должны отметить это как ответ, если это вам помогло. 30 окт. 112011-10-30 21:55:27

+1

Это должно получить +50, потому что ни один из других сообщений не отменяет «PendingIntent», а также «AlarmManager», и я использую '(PendingIntent.getBroadcast (getBaseContext(), 0, checkIntent, PendingIntent.FLAG_NO_CREATE)! = null); 'проверить, работает ли мой будильник, и это единственное, что работало без перезапуска моей активности. Отличная работа. 14 июн. 132013-06-14 03:29:47