Respuesta corta: Parece que
una app no puede saber cuándo aprietas una tecla y cuándo la sueltas porque es un evento de muy bajo nivel que lo gestiona el sistema operativo directamente. Modificando el framework de Android o si el dispositivo tiene root entonces sí habría mecanismos.
Respuesta larga:
Buena pregunta, parece que hay que escarvar bastante en el API de Android porque los eventos de bajo nivel del tipo tecla pulsada y tecla soltada están en el WindowManager, pero a partir de ahí se filtran y ya no vuelves a verlos, así que no es trivial hacer una app que detecte que una tecla está siendo pulsada. De hecho, diría que es imposible salvo que te metas a modificar la ROM del dispositivo o, si es root, accedas al registro de eventos por otro lado para interceptar las pulsaciones.
El problema está en que
parece que el último lugar donde Android expone esos eventos de bajo nivel es en el WindowManagerPolicy que intercepta los eventos del teclado con el método interceptKeyBeforeQueueing. Pero eso no puedes tocarlo en una app normal ya que es una implementación del sistema. Entonces tienes que modificar la implementación del framework de Android... que eso igual para un demostrador te vale si puedes modificar la ROM del sistema, pero desde luego para una app que quieras publicar en la Play Store y que la use cualquiera en su móvil no puedes evidentemente.