Приостановка обслуживания во время тревоги, затем возобновление
Таким образом, у меня есть Служба, в которой я хочу иметь возможность прослушивать Сигналы тревоги и временно отключать себя / приостанавливать работу, пока сигнализация звонит, а затем возобновить работу. То, что делает моя служба, заключается в том, что она надувает вид с помощью 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
}
}
}