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 pulsación de teclas

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 el 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) {
        ...
    }
    ...
})

Vistas

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

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 pulsaciones de la barra espaciadora

Dentro del método del modificador de Compose onPreviewKeyEvent y onKeyEvent o del método onKeyUp() de las 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) {
        ...
    }
    ...
})

Vistas

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: Clave de código constante para la barra espaciadora.

Compose

  • onPreviewKeyEvent: 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, este modificador permite que un componente intercepte eventos clave de hardware cuando este (o uno de sus elementos secundarios) esté enfocado.

Vistas

  • onKeyUp(): Controlador de eventos que se llama cuando se libera una clave 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.