Как я узнаю, включен ли мой таймер Alarm Manager?

#android

#Android

Вопрос:

Я использую этот код (из моей деятельности) для запуска периодического таймера в приложении:

 Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),(i * 1000), pendingIntent);
Toast.makeText(this, "Alarm set in "   i   " seconds",
Toast.LENGTH_SHORT).show();
  

Я хочу знать, как я могу узнать (из другого действия), работает ли таймер?

Ответ №1:

Одна из возможностей, о которой я могу подумать, — проверить, определено ли ожидающее намерение.

Вы можете позвонить

 PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE);
  

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

Другая возможность — сохранить все установленные сигналы тревоги в файле SharedPreferences. Таким образом, вы можете искать все сигналы тревоги, установленные вашим приложением, в общем файле prefs.

Насколько я вижу, нет способа получить список установленных сигналов тревоги для вашего приложения из AlarmManager

Комментарии:

1. Привет, у меня это не работает, я всегда получаю значение (не null) с момента его запуска. b.t.w чтобы остановить таймер, который я использую: // Подготовьте намерение Намерение Намерение = новое намерение (это, LocaitonSampleBroadcaseReceiver.class ); PendingIntent PendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); // Остановить таймер AlarmManager AlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); AlarmManager.cancel(PendingIntent);

2. Это правильно, PendingIntent будет сохраняться до тех пор, пока вы не вызовете cancel для ожидающего намерения. Это проблема с подходом, который вы можете проверить, существует ли намерение, только если оно зарегистрировано в alarmmanager

Ответ №2:

в функции остановки

 Intent intent = new Intent(this, LocaitonSampleBroadcaseReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent);
  

просто добавьте это:

 pendingIntent.cancel();
  

таким образом, вы можете использовать строку, написанную комментарием Janusz

 PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE);