Переопределил метод dispatchKeyEvent в Activity для обработки нажатия кнопок громкости.
При очень быстром нажатии кнопки уменьшения громкости (5 раз в секунду где-то), метод не вызывается. При снижении темпа все события (KeyEvent) приходят (включая те, которые "подвисли" при большом темпе). При этом сами события созданы именно в момент нажатия кнопки (getEventTime возвращает вполне правдивые значения).
С кнопкой увеличения громкости таких проблем не замечено. Проверил на эмуляторе 4.1, и на телефоне 5.1. Даже системный регулятор громкости подвержен такому эффекту.
Может есть способ заставить Activity принудительно обработать накопившуюся очередь, по таймеру например?
Дѣаволъ: во первых, с того момента прошло больше года, всё могло поменяться. Во вторых, наивно думать, что услуга отключается моментально. Даже если пришла смс, наверняка пройдёт какое-то время, пока информация обновится на всех репликах БД, в кэшах и т.д. Нужно пробовать через сутки после отключения. Уж если пошёл такой разговор, то через 2 недели я сделаю это и отпишу вам. Можете написать мне в g+ или hangouts, там удобнее.
Я не мастер андроида, но судя по всему, громкость меняется небыстро и, поэтому, менять ее нужно в отдельном потоке. Ну или какая-то очередь обработки.. например если пришло уже новое задание, то предыдущее отменяем и сразу меняем громкость на какой-то другой уровень.
я не меняю громкость. Я перехватываю событие нажатия кнопки громкости. Дальше его не пускаю (т.е. система не реагирует на нажатие, только моё приложение).