Приостановка обслуживания во время тревоги, затем возобновление

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

Это было достаточно легко реализовать для входящих звонков с использованием PhoneStateListener, но я не видел ничего удобного для тревог - я думаю, я мог бы реализовать AlarmManager.onAlarmListener, который отключает мой сервис, когда будильник зазвонит, но я не уверен в как бы я снова включил его потом.

Благодарю за любую помощь!

2 ответа

Решение

Наконец-то разобрался!

Вы можете получить время следующей тревоги следующим образом:

  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  alarmManager.getNextAlarmClock().getTriggerTime()

Так что просто добавьте это в ваш метод onCreate службы:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        if (alarmManager.getNextAlarmClock() != null) {
            UIHandler.postAtTime(new Runnable() {
                @Override
                public void run() {
                    stopSelf();
                }
            }, alarmManager.getNextAlarmClock().getTriggerTime());
        }

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

Я верю, что это будет работать только на API 21+

Возможно, вы можете попытаться реализовать AudioManager.OnAudioFocusChangeListener https://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html

 @Override
    public void onAudioFocusChange(int i) {
            if (i <= 0 && i != -3) {
               // pause
            } else if (i > 0) {
               // resume
            }
        }
    }
Другие вопросы по тегам