Cómo pausar y reanudar la reproducción de contenido multimedia con la barra espaciadora del teclado externo

Cada vez que la app reproduce un archivo multimedia, los usuarios deben poder pausar y reanudar la reproducción presionando la barra espaciadora en un teclado físico.

Cómo responder a eventos de teclas presionadas

Las apps basadas en Jetpack Compose o vistas responden a las pulsaciones de teclas del teclado de forma similar: la app escucha los eventos de pulsación de teclas, los filtra y responde a las pulsaciones de teclas, como cuando se presiona la barra espaciadora.

1. Cómo escuchar eventos del teclado

Compose

Con Jetpack Compose, usa el modificador onPreviewKeyEvent o onKeyEvent dentro del diseño que administra la pulsación de teclas:

Column(modifier = Modifier.onPreviewKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

o

Column(modifier = Modifier.onKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

Views

En una actividad de tu app, anula el método onKeyUp():

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    ...
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    ...
}

El método se invoca cada vez que se suelta una tecla presionada, por lo que se activa exactamente una vez por cada vez que se presiona una tecla.

2. Filtra las pulsaciones de la barra espaciadora

Dentro de los métodos de modificador onPreviewKeyEvent y onKeyEvent de Compose o el método onKeyUp() de vistas, filtra por KeyEvent.KEYCODE_SPACE para enviar el evento correcto al componente multimedia:

Compose

Column(modifier = Modifier.onPreviewKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
        ...
    }
    ...
})

o

Column(modifier = Modifier.onKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
        ...
    }
    ...
})

Views

Kotlin

if (keyCode == KeyEvent.KEYCODE_SPACE) {
    togglePlayback()
    return true
}
return false

Java

if (keyCode == KeyEvent.KEYCODE_SPACE) {
    togglePlayback();
    return true;
}
return false;

Puntos clave

  • KEYCODE_SPACE: Es la constante de código de tecla para la barra espaciadora.

Compose

  • onPreviewKeyEvent: Es un modificador que permite que un componente intercepte eventos clave de hardware cuando este (o uno de sus elementos secundarios) esté enfocado.
  • onKeyEvent: Al igual que onPreviewKeyEvent, es un modificador que permite que un componente intercepte eventos clave de hardware cuando el componente (o uno de sus elementos secundarios) esté enfocado.

Views

  • onKeyUp(): Es el controlador de eventos al que se llama cuando se libera una tecla y no la maneja una vista (como TextView) dentro de una actividad.

Resultados

Tu app ahora puede responder cuando se presiona la barra espaciadora para pausar y reanudar un video o cualquier otro contenido multimedia.