Диспетчер тревог не останавливает тревогу, не убивая приложение - PullRequest
0 голосов
/ 21 октября 2019

Многие люди задавали мне один и тот же вопрос, но ни один из них не ответил на мой. Я создал приложение тревоги, используя AlarmManager и BroadcastReciever . alarmManager.cancel () не работает должным образом, и сигнал тревоги звучит до тех пор, пока приложение не будет убито.

Я использовал тот же Intent и аргументы для установки и отмены будильника. Ниже приведен код для установки будильника:

 public void startAlarm() {
            alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            intent=new Intent(this, AlarmReceiver.class);
            pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,0);
            alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
    }

Остановка будильника:

public void stopAlarm(){
   alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        intent=new Intent(this, AlarmReceiver.class);
        pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,0);

            alarmManager.cancel(pendingIntent);

}

Класс BroadcastReciever:

public class AlarmReceiver extends BroadcastReceiver {
    MediaPlayer mediaPlayer;

    @Override
    public void onReceive(Context context, Intent intent) {

        mediaPlayer=MediaPlayer.create(context, Settings.System.DEFAULT_ALARM_ALERT_URI);
        mediaPlayer.start();

    }

}

Примечание. Код работает нормально, еслиТревога останавливается перед звонком. Однако, как только сигнал тревоги начинает звонить, он не может быть остановлен, пока приложение не убьет.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Используйте это

  public void stopAlarm(){
   alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        intent=new Intent(this, AlarmReceiver.class);
        pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.cancel(pendingIntent);

}
0 голосов
/ 21 октября 2019

Try- alarmManager.set (AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis (), AlarmManager.INTERVAL_DAY, pendingIntent);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...