Pausar e retomar a reprodução de mídia usando a barra de espaço do teclado

Ícone de classificação de quatro estrelas

A otimização para telas grandes inclui a capacidade de processar entradas do teclado externo, como usar o pressionamento da Spacebar para pausar ou retomar a reprodução de vídeos e outras mídias. Isso é especialmente útil para tablets, que geralmente se conectam a teclados externos, e para Chromebooks, que geralmente vêm com teclados externos, mas podem ser usados no modo tablet.

Quando a mídia é o único elemento da janela (por exemplo, uma reprodução de vídeo em tela cheia), responda a eventos de pressionamento de tecla no nível da tela, no caso do Jetpack Compose.

Práticas recomendadas

Sempre que seu app reproduzir um arquivo de mídia, os usuários poderão pausar e retomar a reprodução pressionando a barra de espaço em um teclado físico.

Componentes

  • KEYCODE_SPACE: constante de código de tecla da barra de espaço.
  • onPreviewKeyEvent: Modifier o que permite a um componente interceptar eventos de teclas do hardware quando ele ou um dos filhos está em foco.
  • onKeyEvent: semelhante ao onPreviewKeyEvent, esse Modifier permite que um componente intercepte eventos de teclas do hardware quando ele ou um dos filhos está em foco.

Etapas

Para responder a pressionamentos de tecla no Jetpack Compose, seu app precisa detectar eventos de pressionamento de tecla, filtrá-los e responder a pressionamentos selecionados, como o de uma barra de espaço.

1. Detectar eventos de teclado

Com o Jetpack Compose, você pode usar os modificadores onPreviewKeyEvent ou onKeyEvent no componente que gerencia o pressionamento de tecla.

A principal diferença entre os dois modificadores é para onde o evento é enviado se o modificador não o consumir:

  • onPreviewKeyEvent: envia o evento ao primeiro filho.
  • onKeyEvent: envia o evento ao elemento combinável pai.

2. Filtrar e processar pressionamentos da barra de espaço

Dentro da expressão lambda do modificador onPreviewKeyEvent ou onKeyEvent, filtre eventos de tecla em que a liberação de tecla (KeyEventType.KeyUp) corresponda à barra de espaço (Key.Spacebar).

Retorne true se o código processar o evento e você não quiser que ele se propague. Retorne false para permitir que outros componentes processem o evento.

  • Opção A: usar onPreviewKeyEvent

    Column(
        modifier = Modifier.onPreviewKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

  • Opção B: usar onKeyEvent

    Column(
        modifier = Modifier.onKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

Resultados

Seu app agora pode responder a pressionamentos de tecla da barra de espaço para pausar e retomar um vídeo ou outra mídia.

Outros recursos

Para saber mais sobre os eventos de teclado e como gerenciá-los, consulte Gerenciar a entrada do teclado.