onKeyDown em um serviço? (Teclas de atalho globais)

O que estou basicamente tentando alcançar é teclas de atalho globais personalizadas ou, em outras palavras, "as coisas acontecerão quando eu apertar certos botões, não importa qual programa esteja no topo".
Presumo que seja necessário um serviço.

Eu tenho um teste rápido e sujo que apenas me diz o que foi pressionado que funcionará se for a janela ativa.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    char pop;
    pop = (char)event.getUnicodeChar();
    Toast.makeText(this, Character.toString(pop) , Toast.LENGTH_SHORT).show();
    return super.onKeyDown(keyCode, event);
  }

Mas, obviamente, se eu mudar de janela ou entrar em uma caixa de texto, isso não funcionará. Se eu colocá-lo diretamente em um serviço (ou em um serviço de imputmethod) e iniciar o serviço, nada acontece. (Algumas permissões são necessárias, talvez?) Alguma sugestão sobre onde estou errado? Ou uma maneira melhor de capturar qual botão foi pressionado?

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion