Como detectar longos pressionamentos da tecla de volume em um serviço?

Eu quero detectar pressionamentos longos na tecla de volume em um serviço. Aqui estão minhas opções:


A) Deixe o usuário controlar o volume da canvas de bloqueio

Não quero detectar se o usuário segurou o botão de volume em um serviço enquanto a canvas está desligada. Eu já tentei (por 2 dias) fazê-lo com o contentObserver , mas o problema é que o contentObserver detecta alterações de volume e o volume não muda quando a canvas está desligada. Existe alguma maneira que eu possa deixar o usuário controlar o volume da canvas de bloqueio?


B) Detecte o pressionamento longo para o botão do volume do serviço

Como posso fazer isso? Existe algum receptor de broadcast que eu possa usar enquanto a canvas está desligada? Existe uma maneira de implementar o dispatchKeyEvent em um serviço?

Eu já vi isso , mas para mim a segunda resposta não funciona no fundo. Eu acho que a maneira mais fácil seria a opção A, porque eu já tenho tudo configurado para quando o usuário muda de volume, então posso deixar o usuário controlar o volume da canvas de bloqueio? Se não, há mais alguma coisa que eu possa fazer?

Muito obrigado,

Ruchir