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

Значок с четырьмя звездами

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

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

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

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

Ингредиенты

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

Шаги

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

1. Как отслеживать события клавиатуры

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

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

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

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
    }

Результаты

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

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

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