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

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.

Responder a eventos de pressionamento de tecla

Apps baseados no Jetpack Compose ou em visualizações respondem a pressionamentos de tecla de maneiras semelhantes: o app detecta eventos de pressionamento de tecla, filtra os eventos e responde a pressionamentos, como o de uma barra de espaço.

1. Detectar eventos de teclado

Compose

Com o Jetpack Compose, use o modificador onPreviewKeyEvent ou onKeyEvent no layout que gerencia o pressionamento de tecla:

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

ou

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

Visualizações

Em uma atividade no app, substitua o método onKeyUp():

Kotlin

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

Java

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

O método é invocado sempre que uma tecla pressionada é solta. Portanto, ele é acionado exatamente uma vez para cada tecla pressionada.

2. Filtrar pressionamentos da barra de espaço

Nos métodos modificadores onPreviewKeyEvent e onKeyEvent do Compose ou no método onKeyUp() das visualizações, filtre por KeyEvent.KEYCODE_SPACE para enviar o evento correto ao componente de mídia:

Compose

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

ou

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

Visualizações

Kotlin

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

Java

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

Pontos principais

  • KEYCODE_SPACE: constante de código de tecla da barra de espaço.

Compose

  • onPreviewKeyEvent: modificador que permite que um componente intercepte eventos de teclas do hardware quando ele ou um dos filhos está em foco.
  • onKeyEvent: semelhante ao onPreviewKeyEvent, o modificador que permite que um componente intercepte eventos de teclas do hardware quando o componente (ou um dos filhos) está em foco.

Visualizações

  • onKeyUp(): manipulador de eventos chamado quando uma tecla é liberada e não é processada por uma visualização (como TextView) em uma atividade.

Resultados

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