Приостановка и возобновление воспроизведения мультимедиа с помощью клавиши "Пробел"

Значок оценки в четыре звезды

Оптимизация для больших экранов включает поддержку ввода с внешней клавиатуры, например реакцию на нажатие пробела для приостановки или возобновления воспроизведения видео и других медиафайлов. Это особенно полезно для планшетов, к которым часто подключают внешние клавиатуры, и устройств Chromebook, которые обычно поставляются с внешними клавиатурами, но могут использоваться в режиме планшета.

Если медиаконтент – единственный элемент окна (например, при полноэкранном просмотре видео), реагируйте на нажатия клавиш на уровне экрана в Jetpack Compose.

Рекомендации

При воспроизведении медиафайла в приложении у пользователей должна быть возможность приостанавливать и возобновлять воспроизведение нажатием клавиши Пробел на физической клавиатуре.

Ингредиенты

  • KEYCODE_SPACE – константа кода клавиши для пробела.
  • onPreviewKeyEvent – Modifier, который позволяет компоненту перехватывать события аппаратных клавиш, когда он (или один из его дочерних элементов) находится в фокусе.
  • Modifier onKeyEvent, как и onPreviewKeyEvent, позволяет компоненту перехватывать события аппаратных клавиш, когда он или один из его дочерних элементов находится в фокусе.

Шаги

Чтобы реагировать на нажатия клавиш клавиатуры в Jetpack Compose, ваше приложение должно прослушивать события нажатия клавиш, фильтровать события и реагировать на выбранные нажатия клавиш, например нажатие клавиши пробела.

1. Отслеживание событий клавиатуры

В Jetpack Compose можно использовать модификатор onPreviewKeyEvent или onKeyEvent в компоненте, который управляет нажатием клавиш.

Основное различие между двумя модификаторами заключается в том, куда отправляется событие, если модификатор его не использует:

  • onPreviewKeyEvent – отправляет событие первому дочернему элементу.
  • onKeyEvent – отправляет событие родительскому элементу composable-функции.

2. Фильтрация и обработка нажатий пробела

Внутри лямбда-выражения модификатора onPreviewKeyEvent или onKeyEvent отфильтруйте события нажатия клавиш, в которых отпускание клавиши (KeyEventType.KeyUp) соответствует пробелу (Key.Spacebar).

Если ваш код обрабатывает событие и вы не хотите, чтобы оно распространялось дальше, возвращайте true. Возвращает false, чтобы другие компоненты могли обработать событие.

  • Вариант А. Использование 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
    }

  • Вариант Б. С помощью 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
    }

Результаты

Теперь ваше приложение может реагировать на нажатия клавиши пробела, чтобы приостанавливать и возобновлять воспроизведение видео или других медиафайлов.

Дополнительные ресурсы

Подробнее о событиях клавиатуры и управлении ими рассказывается в статье Обработка ввода с клавиатуры.